今天對觸發器研究了一下,之前的學習感覺挺朦朧的,今天鼓搗了一天,算是有了一點點了解,把學習的體會記錄了下來。
常見的觸發器
觸發器的作用: 自動化操作,減少了手動操作以及出錯的機率(現實工作中用的比較少,因爲想讓他執行起來效率高很難)
一、DML觸發器
Insert、delete、update(不支持select)
after觸發器(for)、instead of觸發器(不支持before觸發器)
二、(*)DDL觸發器
Create table、create database、alter、drop….
語法:
create trigger trig_觸發器名 on 針對哪個表觸發(表名)
after (這裏用for也一樣,兩者都表示after觸發器) | intead of delete、update、insert
as
begin
T-SQL語句
end
1、首先了解兩張表 inserted,deletede
這兩張表示當執行、插入、修改更新等操作時系統給創建的表,當操作結束之後會自動銷燬,每執行依據t-sql語句就會觸發一次觸發器,不管你執行的語句刪除、修改、插入的是多少條記錄,
所以,要注意:這兩張表裏存的是你上一次最後執行的記錄
-->inserted
當執行 insert 語句的時候會生成兩條記錄,一條會插入到你指定的表裏,一條會放到系統創建的 inserted 表中
當執行update 語句的時候會先把原來的記錄刪除放到系統創建的deleted表中,然後生成兩條記錄,一條放到你指定的表裏,一條放到insert表裏
--》deleteed
當執行delete語句時,會把這條記錄放到deleted表裏
2、after 觸發器
在語句執行操作之後觸發
在語句執行完畢之後觸發
按語句觸發,而不是所影響的行數,無論所影響爲多少行,只觸發一次。
只能建立在常規表上,不能建立在視圖和臨時表上。(*)
可以遞歸觸發,最高可達32級。
update(列),在update語句觸發時,判斷某列是否被更新,返回布爾值。
3、intead of觸發器
用來替換原來的操作
用來替換原本的操作
不會遞歸觸發
可以在約束被檢查之前觸發
可以建在表和視圖上(*)
select * from TClass
--複製一張新表,用來備份
select top 0 * into NewTClass from TClass
select * from NewTClass
--創建一個觸發器,當刪除TClass表中的數據時自動觸發,把刪除的數據備份到一張新標中
create trigger trig_NewTClass_delete on TClass
after delete --執行刪除語句之後觸發
as
begin
--一次插入多條記錄,如果用values只可以查入一條,要是用戶一次刪除多條,那麼values就不能把多條記錄插入了
insert into NewTClass select cName,cDescription from deleted
end
delete from TClass where classId =14
--刪除觸發器
drop trigger trig_NewTClass_delete
--instead觸發器,當執行刪除操作時,把刪除操作替換成 打印 print '執行刪除操作了'
create trigger trig_NewTClass_delete on TClass
instead of delete
as
begin
print '執行刪除操作了'
end