Sql Server 觸發器筆記

1.定義

  1. 觸發器是一種專用類型的存儲過程,它被捆綁到SQL Server 的表格或者視圖上。通過事件進行觸發被自動調用執行。
  2. 觸發器有兩個特殊的表:插入表(instered表)和刪除表(deleted表)。這兩張是邏輯表也是虛表。有系統在內存中創建者兩張表,不會存儲在數據庫中。而且兩張表的都是隻讀的,只能讀取數據而不能修改數據。這兩張表的結果總是與被改觸發器應用的表的結構相同。當觸發器完成工作後,這兩張表就會被刪除。Inserted表的數據是插入或是修改後的數據,而deleted表的數據是更新前的或是刪除的數據。
  3. 觸發器分爲Afrer觸發器與Instead of觸發器。其中after觸發器要求只有執行某一操作insert、update、delete之後觸發器才被觸發,且只能定義在表上。而instead of觸發器表示並不執行其定義的操作(insert、update、delete)而僅是執行觸發器本身。既可以在表上定義instead of觸發器,也可以在視圖上定義。

2.作用

  • 觸發器可以強化約束,來維護數據的完整性和一致性,可以跟蹤數據庫內的操作從而不允許未經許可的更新和變化。

3.After觸發器

after觸發器要求只有執行某一操作insert、update、delete之後觸發器才被觸發,且只能定義在表上。

  1. Book表
    在這裏插入圖片描述
    2.BookType表
    在這裏插入圖片描述

3.1insert觸發器

  • 在新增時觸發
  • 在book插入一條數據時,booktype表中對應類別數量加一
--創建insert觸發器--
go
create trigger tgr_insert
on books
for insert --設置爲insert觸發器
as
declare @typeID int --定義變量
select @typeID=TypeID from inserted --從插入表獲取數據
update bookType set Nums = Nums+1 where ID=@typeID --更新bookType表

3.2update觸發器

  • 在修改時觸發
  • 修改book表中分類時,在booktype表中原來的分類數量減一,修改後的分類數量加一
--創建update觸發器--
go
create trigger tgr_update
on books
for update --設置爲update觸發器
as
--定義變量
declare @oldtypeID int
declare @newtypeID int
--從兩張表中獲取數據
select @oldtypeID=TypeID from deleted 
select @newtypeID=TypeID from inserted
--執行操作
update bookType set Nums = Nums-1 where ID=@oldtypeID
update bookType set Nums = Nums+1 where ID=@newtypeID

3.3delete觸發器

  • 在刪除時觸發
  • 刪除book表中數據時,將booktype表對應的分類數量減一
--創建update觸發器--
go
create trigger tgr_delete
on books
for delete --設置爲delete觸發器
as
--定義變量
declare @typeID int
--從刪除表中獲取數據
select @typeID=TypeID from deleted 
--執行操作
update bookType set Nums = Nums-1 where ID=@typeID

4.Instead of觸發器

  • instead of觸發器表示並不執行其定義的操作(insert、update、delete)而僅是執行觸發器本身。既可以在表上定義instead of觸發器,也可以在視圖上定義。
--創建instead of觸發器--
go
create trigger tgr_intesadOf
on books
instead of update --設置爲 instead of 觸發器,執行update操作時觸發
as
--定義變量
declare @oldtypeID int
declare @newtypeID int
--從兩張表或獲取數據
select @oldtypeID=TypeID from deleted 
select @newtypeID=TypeID from inserted
--執行操作
update bookType set Nums = Nums-1 where ID=@oldtypeID
update bookType set Nums = Nums+1 where ID=@newtypeID
  • 對book表執行修改操作時book表中的數據不會被修改,而觸發器中的操作語句會被執行
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章