數據庫:觸發器

觸發器的概念:

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

    是用戶定義在關系表上的一類有事件驅動的特殊過程。一旦定義,任何對表的增刪改操作均有服務器自動激活相應的觸發器,在DBMS核心層進行集中的完整性控制。類似于約束,但比約束更靈活。

觸發器的分類:

DML觸發器:DML(Data Manipulation Language)觸發器是當數據庫服務器中發生數據操作語言事件時執行的存儲過程。DML觸發器又分為兩類:After觸發器和Instead Of觸發器

DDL觸發器:DDL觸發器是在響應數據定義語言(Data Definition Language)事件時執行的存儲過程。DDL觸發器一般用于執行數據庫中管理任務。如審核和規范數據庫操作、防止數據庫表結構被修改等。

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

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

在SQL Server里,每個DML觸發器都分配有兩個特殊的表,一個是Inserted表,一個是Deleted表。它們兩個存在于數據庫服務器的內存中,是由系統管理的邏輯表,是兩個臨時表,而不是真正存儲在數據庫中的物理表。用戶對這兩個表只有讀取的權限,沒有修改的權限。

這兩個表的結構(主外鍵、字段、數據類型等)與觸發器所在數據表的結構是完全一致的,當觸發器的工作完成之后,這兩個表也將會從內存中刪除。

定義觸發器:

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

CREATE TRIGCER <觸發器名>
| BEFORE| AFTER| <觸發事件>ON<表名>
FOR EACH | ROW| STATEMENT|
{ WHEN <觸發條件>}
<觸發動作體>

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

必須在同一模式下。

2.表名:表數據發生變化是,激活定義在該表上相應<觸發事件>的觸發器,也稱觸發器的目標表。

3。觸發事件:可以是INSERT ,DELETE .UPDATE,也可以是這幾個事件的組合。指明修改哪些列時觸發器

組合,可以是幾個事件的組合并且可以附加OF <觸發列>。

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

5.觸發條件:被激活時,只有當觸發條件為真時觸發動作提才執行,如果省略WHEN,則觸發動作體在觸

發器激活后立即執行

6.觸發動作體:是一個匿名PL/SQL過程塊,也可以是對已創建存儲過程的調用。

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

下面看一下例子:

定義一個BEFORE行級觸發器,為教師表Teacher定義完整性規則“教授的工資不得低于4000元,如果低于,就自動改為4000”

CREATE TRLGGER Insert_Or_Updata_Sal   /*在教師表Teacher上定義觸發器*/
    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 行級觸發器,當教師表Teacher的工資發生變化后自動在工資變化表Sal_log中增加一條相應記錄

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;

激活觸發器:

    執行表上的BEFORE觸發器;

    激活觸發器的SQL語句;

    執行該表上的AFTER觸發器。

刪除觸發器:

    DROP TRIGGER<觸發器名> ON <表名>;

本文題目:數據庫:觸發器
本文URL:http://m.kartarina.com/article36/pgoesg.html

成都網站建設公司_創新互聯,為您提供軟件開發網站建設建站公司響應式網站品牌網站設計網站設計

廣告

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

成都定制網站網頁設計
主站蜘蛛池模板: 精品无码久久久久久国产| 亚洲av永久无码精品网址| 无码 免费 国产在线观看91| 无码人妻丰满熟妇区毛片18| 亚洲av无码一区二区三区乱子伦 | 无码免费午夜福利片在线 | 中文有码vs无码人妻| 精品久久亚洲中文无码| 亚洲免费日韩无码系列| 精品无码国产一区二区三区AV| 免费无码又爽又黄又刺激网站| 久久久久久久人妻无码中文字幕爆| 日韩av无码中文无码电影| 国产精品无码免费播放| 亚洲中文无码永久免| 蜜桃成人无码区免费视频网站| 中文有无人妻vs无码人妻激烈 | 日韩免费无码一区二区视频| 无码人妻精品一区二区三| 中文字幕精品无码一区二区| 色欲aⅴ亚洲情无码AV| av无码免费一区二区三区| 久久亚洲AV成人无码国产| 无码人妻一区二区三区免费看| 亚洲乱码无码永久不卡在线| 中出人妻中文字幕无码| 中文字幕在线无码一区二区三区| 无码高潮爽到爆的喷水视频app| 日韩精品无码一区二区中文字幕| 亚洲中文字幕无码日韩| 欧洲精品无码一区二区三区在线播放| mm1313亚洲精品无码又大又粗| 国产精品无码翘臀在线观看| 亚洲AV成人无码网天堂| 熟妇人妻无码中文字幕老熟妇| 国产精品爽爽va在线观看无码| 精品人妻无码专区在中文字幕| 高清无码一区二区在线观看吞精| 国产精品无码素人福利不卡| 免费无码黄网站在线看| 色爱无码AV综合区|