觸發器的概念:
觸發器是一種特殊的存儲過程,它被分配給某個特定的表。當對這個表進行插入、更新或刪除操作時, 自動調用觸發器執行觸發器里規定的操作.
觸發器是確保數據完整性和一致性的基本有效的方法。
和表相關聯,可以看作是表的一部分;
不能直接引用,通過insert/update/delete自動激活;
屬於事務機制;
同一類型的觸發器在表上可以有多個
觸發器的特點:
不接受用戶參數,也不返回用戶參數;
事件驅動,自動調用;存儲在表上。
對數據庫中的相關表進行級聯更新和刪除
強制比Check約束更復雜的數據完整性。
可以引用其他表中的列。
觸發器的種類:
插入型觸發器
刪除型觸發器
更新型觸發器
一個表上可以定義多種類型的觸發器
觸發器的工作原理:
SQL Server創建了兩個專用表:inserted表和deleted表。這是兩個邏輯表,由系統來維護,不允許用戶直接對這兩個表進行修改。它們存放於內存中,不存放 在數據庫中。這兩個表的結構總是與被該觸發器作用的表的結構相同。
Inserted :存放由於INSERT或UPDATE語句的執行而導致要加到該觸發表中去的所有新行。即用於插入或更新表的新行值,在插入或更新表的同時,也將 其副本存入insterted表中。因此,在insterted表中的行總是與觸發表中的新行相同 。
deleted :deleted存放由於DELETE或UPDATE語句的執行而導致要從該觸發表中刪除的所有行。也就是說,把觸發表中要刪除或要更新的舊行移到 deleted表中。因此,deleted表和觸發表不會有相同的行。
觸發器的工作方式:
修改。它們存放在內存中,不存放在數據庫中。
當向表中插入數據時,insert觸發器觸發執行,新的記錄插入到觸發器表和inserted表中。
當觸發一個delete觸發器時,被刪除的表記錄存放到deleted表中。
修改一條記錄等於插入一條新記錄,同時刪除舊記錄,表中原始記錄放在deleted中,修改過的記錄插入到inserted表中。
創建觸發器:
語法:
create trigger 觸發器名
on 表名
for delete /insert /update
as
觸發器要執行的操作
創建插入型觸發器:
--在users表中定義觸發器,當插入紀錄時彈出消息:你已經向users表里插入了一條紀錄!
create trigger t_users
on users
for insert
as
print '已向users表里插入了一條記錄'
Go
創建Delete觸發器:
--在users表中定義觸發器,當刪除紀錄時彈出消息:你已經向users表里刪除了一條紀錄!
create trigger t_users
on users
for delete
as
print '你已經刪除了此數據'
go
創建Updata觸發器:
如果在xs表中更新數據,則在執行時顯示提示信息。
create trigger tr_update
on users
for update
as
print ‘你已經更新了此數據!’
go
修改、刪除觸發器:
修改語法:
alter trigger 觸發器名
on 表名
for delete /insert /update
as
觸發器要執行的操作
刪除語法:
drop trigger 觸發器名
禁用、啟用觸發器:
禁用語法:
Alter table 表名
disable trigger 觸發器名
啟用語法:
Alter table 表名
enable trigger 觸發器名
使用觸發器時應考慮的因素:
首先檢查約束。如果在觸發器表上存在約束,則約束在 觸發器執行前檢查。如果違反約束,觸發器就不執行。
對任何動作都可以有多個觸發器。允許在一個表上嵌套幾個觸發器。一個表可以定義多個觸發器。每個觸發器可以為一個或幾個動作定義