觸發器的概念:
創新互聯建站于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。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯