今天對觸發器研究了一下,之前的學習感覺挺朦朧的,今天鼓搗了一天,算是有了一點點了解,把學習的體會記錄了下來。
常見的觸發器
觸發器的作用: 自動化操作,減少了手動操作以及出錯的機率(現實工作中用的比較少,因為想讓他執行起來效率高很難)
一、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
asbegin
t-sql語句
end1、首先了解兩張表 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 --執行刪除語句之後觸發
asbegin
--一次插入多條記錄,如果用values只可以查入一條,要是使用者一次刪除多條,那麼values就不能把多條記錄插入了
insert into newtclass select cname,cdescription from deleted
enddelete from tclass where classid =14
--刪除觸發器
drop trigger trig_newtclass_delete
--instead觸發器,當執行刪除操作時,把刪除操作替換成 列印 print '執行刪除操作了'
create trigger trig_newtclass_delete on tclass
instead of delete
asbegin
print '執行刪除操作了'
end
SQLSERVER觸發器之臨時表
sql觸發器中,系統自動會生成兩張臨時表,分別是deleted 和 inserted 它們是邏輯 概念 表。也可理解為是臨時表。為方便理解,可以這麼來認為inserted表和deleted表的作用 inserted表就是放新的記錄,delete表就是放舊的記錄。並且,它們的表結構與原表是完全相同的。...
SQLServer之建立LOGON觸發器
登入觸發器將為響應 logon 事件而激發儲存過程。與 sql server例項建立使用者會話時將引發此事件。登入觸發器將在登入的身份驗證階段完成之後且使用者會話實際建立之前激發。因此,來自觸發器內部且通常將到達使用者的所有訊息 例如錯誤訊息和來自 print 語句的訊息 會傳送到 sql serv...
sqlserver觸發器複習
create table a a1 int,a2 int create table b b1 int,b2 int insert into a values 1,0 insert into b values 1,0 create trigger tri update a2 a on a for up...