sql觸發器入門學習

2021-04-28 07:32:29 字數 2416 閱讀 9447

先說一下sql中觸發器的概念:觸發器是一種特殊的儲存過程,被定義為在對特定表或檢視發出update 、 insert 、delete? 語句時自動執行

附:所謂事務是使用者定義的乙個資料庫操作序列,這些操作要麼全做要麼全不做,是乙個不可分割的工作單位。例如,在關聯式資料庫中,乙個事務可以是一條sql語句、一組sql語句或整個程式。

簡單舉個例子就是你要同時修改資料庫中兩個不同表的時候,如果它們不是乙個事務的話,當第乙個表修改完,可是第二表改修出現了異常而沒能修改的情況下,就只有第二個表回到未修改之前的狀態,而第乙個表已經被修改完畢。

而當你把它們設定為乙個事務的時候,當第乙個表修改完,可是第二表改修出現了異常而沒能修改的情況下,第乙個表和第二個表都要回到未修改的狀態!這就是所謂的事務回滾。

有2種觸發器

after觸發器在執行insert、update、delete語句的操作之後執行

instead of 觸發器代替insert、update、delete語句執行

insert觸發器的工作過程

在定義了insert觸發器的表上執行insert語句

insert語句插入的行被記錄下來

觸發器動作被執行

inserted

觸發insert觸發器時候,新行被同時增加到觸發器表和inserted臨時表中

inserted表是儲存了插入行的副本的邏輯表,它並不實際存在於資料庫中

inserted表允許使用者引用insert語句所插入的資料 這樣觸發器可以根據具體資料決定是否執行以及如何執行特定語句

insert觸發器使用例項:現在資料庫中有2個表orders和orderdetail 要實現orders表中插入一條記錄insert into(orderid,number) values(4,1004) 後 相應的在orderdetails表中系統自動插入一條記錄(orderid,productid) values(4,104),其中orderid是剛剛插入orders表中的orderid值 先假設productid為乙個 常量值104

實現此功能需要在orders表上加乙個觸發器,觸發器**為:

create trigger tr_insert_orders on? orders

for insert as

begin

declare @id int

select @id=orderid from inserted

insert orderdetails(orderid,productid) values(@id,104)

enddelete觸發器使用例項:現在資料庫中有2個表orders和orderdetails 要實現orderdetails 表中刪除一條記錄後 相應的在order表中系統自動刪除一條與剛才orderdetails表中相同orderid的記錄

實現此功能需要在orderdetails表上加乙個觸發器,觸發器**為:

create trigger tr_delete_orderdetails on [dbo].[orderdetails]

for? delete

asbegin

declare @id int

select @id=orderid from deleted

delete from orders where orderid=@id

endupdate觸發器使用例項:現在資料庫中有2個表orders和orderdetails 要實現orders表中更新一條記錄後? 意即orderid由原來的4更改為5 系統自動的將orderdetails表中的orderid也更新為5 其實資料庫表中對更新的操作執行的流程是先delete然後在insert 所以在orders表中更新orderid的時候原來的orderid的值 存放在了deleted臨時表中 更新後的orderid的值 存放在了inserted臨時表中

實現此功能需要在orders表上加乙個觸發器,觸發器**為:

create trigger tr_update_orders on [dbo].[orders]

for? update

asbegin

declare @oldid int,@newid int

select @oldid =orderid from deleted

select @newid =orderid from inserted

update orderdetails set orderid=@newid where orderid=@oldid

endorders表結構

orderdetails表結構

sql 觸發器 直接遞迴觸發器

create trigger dbo loving20000 on dbo s for delete asdeclare age int select age sage from deleted delete s where sage age delete from s where sname xq...

sql 觸發器 儲存過程 觸發器(3 3)

1 what?什麼是觸發器 trigger 前兩篇介紹了儲存過程,儲存過程可以理解為sql語句集。那麼觸發器就是一種特殊的儲存過程,也就是一群特殊的sql語句集。特殊在哪?從上文得知,儲存過程是依賴名字才被呼叫的。不僅是儲存過程,我們常用的方法等,大部分也是先知道名字,才能去使用。就像吃飯採用訂外賣...

SQL之觸發器

觸發器是一種不帶引數特殊的儲存過程,有使用者定義,資料庫系統根據一定的條件自動執行 sql觸發器大體上可以分為4種 insert 觸發器 在對錶進行資料錄入的時候觸發 delete 觸發器 刪除表中的資料的時候觸發 instead of 觸發器 此類觸發器建立在檢視之上,用來替代相應的動作,比如de...