欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

數(shù)據(jù)庫:觸發(fā)器

觸發(fā)器的概念:

創(chuàng)新互聯(lián)建站于2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站制作、成都做網(wǎng)站網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢想脫穎而出為使命,1280元東烏珠穆沁做網(wǎng)站,已為上家服務(wù),為東烏珠穆沁各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575

    是用戶定義在關(guān)系表上的一類有事件驅(qū)動(dòng)的特殊過程。一旦定義,任何對表的增刪改操作均有服務(wù)器自動(dòng)激活相應(yīng)的觸發(fā)器,在DBMS核心層進(jìn)行集中的完整性控制。類似于約束,但比約束更靈活。

觸發(fā)器的分類:

DML觸發(fā)器:DML(Data Manipulation Language)觸發(fā)器是當(dāng)數(shù)據(jù)庫服務(wù)器中發(fā)生數(shù)據(jù)操作語言事件時(shí)執(zhí)行的存儲(chǔ)過程。DML觸發(fā)器又分為兩類:After觸發(fā)器和Instead Of觸發(fā)器

DDL觸發(fā)器:DDL觸發(fā)器是在響應(yīng)數(shù)據(jù)定義語言(Data Definition Language)事件時(shí)執(zhí)行的存儲(chǔ)過程。DDL觸發(fā)器一般用于執(zhí)行數(shù)據(jù)庫中管理任務(wù)。如審核和規(guī)范數(shù)據(jù)庫操作、防止數(shù)據(jù)庫表結(jié)構(gòu)被修改等。

After觸發(fā)器:這類觸發(fā)器是在記錄已經(jīng)改變完之后(after),才會(huì)被激活執(zhí)行,它主要是用于記錄變更后的處理或檢查,一旦發(fā)現(xiàn)錯(cuò)誤,也可以用Rollback Transaction語句來回滾本次的操作。

Instead Of觸發(fā)器:這類觸發(fā)器一般是用來取代原本的操作,在記錄變更之前發(fā)生的,它并不去執(zhí)行原來SQL語句里的操作(Insert、Update、Delete),而去執(zhí)行觸發(fā)器本身所定義的操作。

在SQL Server里,每個(gè)DML觸發(fā)器都分配有兩個(gè)特殊的表,一個(gè)是Inserted表,一個(gè)是Deleted表。它們兩個(gè)存在于數(shù)據(jù)庫服務(wù)器的內(nèi)存中,是由系統(tǒng)管理的邏輯表,是兩個(gè)臨時(shí)表,而不是真正存儲(chǔ)在數(shù)據(jù)庫中的物理表。用戶對這兩個(gè)表只有讀取的權(quán)限,沒有修改的權(quán)限。

這兩個(gè)表的結(jié)構(gòu)(主外鍵、字段、數(shù)據(jù)類型等)與觸發(fā)器所在數(shù)據(jù)表的結(jié)構(gòu)是完全一致的,當(dāng)觸發(fā)器的工作完成之后,這兩個(gè)表也將會(huì)從內(nèi)存中刪除。

定義觸發(fā)器:

 使用CREATE TRIGGER命令建立觸發(fā)器,其一般格式為:

CREATE TRIGCER <觸發(fā)器名>
| BEFORE| AFTER| <觸發(fā)事件>ON<表名>
FOR EACH | ROW| STATEMENT|
{ WHEN <觸發(fā)條件>}
<觸發(fā)動(dòng)作體>

1.觸發(fā)器名:可包含模式名,也可不包含,同一模式下,觸發(fā)器名必須是唯一的;并且觸發(fā)器名和<表名>

必須在同一模式下。

2.表名:表數(shù)據(jù)發(fā)生變化是,激活定義在該表上相應(yīng)<觸發(fā)事件>的觸發(fā)器,也稱觸發(fā)器的目標(biāo)表。

3。觸發(fā)事件:可以是INSERT ,DELETE .UPDATE,也可以是這幾個(gè)事件的組合。指明修改哪些列時(shí)觸發(fā)器

組合,可以是幾個(gè)事件的組合并且可以附加OF <觸發(fā)列>。

4.觸發(fā)器類型:行級觸發(fā)器(FOR EACH ROW),語句級觸發(fā)器(FOR EACH STATEMENT).

5.觸發(fā)條件:被激活時(shí),只有當(dāng)觸發(fā)條件為真時(shí)觸發(fā)動(dòng)作提才執(zhí)行,如果省略WHEN,則觸發(fā)動(dòng)作體在觸

發(fā)器激活后立即執(zhí)行

6.觸發(fā)動(dòng)作體:是一個(gè)匿名PL/SQL過程塊,也可以是對已創(chuàng)建存儲(chǔ)過程的調(diào)用。

 如果是行級觸發(fā)器,2中情況下都可以使用NEW/OLD引用,UPDATE/INSER事件之后的新值和UPDATE/DELETE事件之前的舊值。如果是語句級觸發(fā)器,則不能在觸發(fā)動(dòng)作體中使用NEW/OLD引用。

下面看一下例子:

定義一個(gè)BEFORE行級觸發(fā)器,為教師表Teacher定義完整性規(guī)則“教授的工資不得低于4000元,如果低于,就自動(dòng)改為4000”

CREATE TRLGGER Insert_Or_Updata_Sal   /*在教師表Teacher上定義觸發(fā)器*/
    BEFORE INSERT OR UPDATE ON Teacher 
    FOR EACH ROW
    AS BEGIN
        IF(new.Job = '教授') AND (new.Sal < 4000) THEN
            new.Sal : = 4000;
        END IF
    END;

定義AFTER 行級觸發(fā)器,當(dāng)教師表Teacher的工資發(fā)生變化后自動(dòng)在工資變化表Sal_log中增加一條相應(yīng)記錄

CREATE TRLGGER Insert_Sal   
    AFTER INSERT ON Teacher 
    FOR EACH ROW
    AS BEGIN
        INSERT INTO Sal_log VALUES(
            new.Eno,new.Sal,CURRENT_USER,CURRENT_TIMESTAMP);
        END;
        
CREATE TRLGGER Update_Sal   
    AFTER UPDATE ON Teacher 
    FOR EACH ROW
    AS BEGIN
        IF(new.Sal <> old.Sal) THEN INSERT INTO Sal_log VALUES(
            new.Eno,new.Sal,CURRENT_USER,CURRENT_TIMESTAMP);
        END IF;
    END;

激活觸發(fā)器:

    執(zhí)行表上的BEFORE觸發(fā)器;

    激活觸發(fā)器的SQL語句;

    執(zhí)行該表上的AFTER觸發(fā)器。

刪除觸發(fā)器:

    DROP TRIGGER<觸發(fā)器名> ON <表名>;

本文題目:數(shù)據(jù)庫:觸發(fā)器
本文URL:http://chinadenli.net/article36/pgoesg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、網(wǎng)站建設(shè)建站公司、響應(yīng)式網(wǎng)站、品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計(jì)