對觸發器的理解

2021-10-06 07:21:27 字數 2437 閱讀 6640

觸發器是一種專用型別的儲存過程,它被**到sql server 的**或者檢視上。

它可以強化約束,來維護資料的完整性和一致性,可以跟蹤資料庫內的操作從而不允許未經許可的更新和變化。可以聯級運算。如,某錶上的觸發器上包含對另乙個表的資料操作,而該操作又會導致該錶觸發器被觸發。

有instead-of和after兩種觸發器

instead-of:當對表insert、update 或 delete 操作時, 把操作交給觸發器,讓觸發器去完成。

after:在 insert、update 或 delete 語句操作之後再執行的操作

觸發器與儲存過程的主要區別在於觸發器的執行方式。儲存過程必須有使用者、應用程式或者觸發器來顯示的呼叫並執行,而觸發器是當特定時間出現的時候,自動執行或者啟用的,與連線用資料庫中的使用者、或者應用程式無關

比如,商品新增的時候,改商品型別的庫存要加1.

先建兩張表

booktypes

books

books表的booktypeid欄位上新建關係

與booktypes表的id相關聯

('發發'

,'singer',2

)delete

from books where id=

2update books set booktypeid=

4where id=

1--當我在書籍表插入一條資料時,觸發乙個事件,這個事件,將會自動在分類表,將該書籍對應的類別的庫存數自動加一

goalter

trigger tri_add

on books for

insert

as--修改分類表的庫存

declare

@booktypeid

intselect

@booktypeid

=booktypeid from inserted

--select * from inserted

--select * from deleted

update booktypes set nums=nums+

1where id=

@booktypeid

--當我在書籍表刪除一條資料時,觸發乙個事件,這個事件,將會自動在分類表,將該書籍對應的類別的庫存數自動減一

gocreate

trigger tri_delete

on books for

delete

asdeclare

@booktypeid

intselect

@booktypeid

=booktypeid from deleted

update booktypes set nums=nums-

1where id=

@booktypeid

--同時刪除和插入一條資料,將刪除的該書籍所對應的類別的庫存數自動減一,同時在插入書籍對應的類別的庫存數自動加一

gocreate

trigger tri_updateee

on books for

update

asdeclare

@newbooktypeid

intdeclare

@oldbooktypeid

intselect

@oldbooktypeid

=booktypeid from deleted

select

@newbooktypeid

=booktypeid from inserted

update booktypes set nums=nums-

1where id=

@oldbooktypeid

update booktypes set nums=nums+

1where id=

@newbooktypeid

當books表中booktypeid發生變化,booktypes中nums也會發生變化。

對觸發器的理解

觸發器是指當表發生改變的時候觸發的動作,當你插入一條記錄到表中的時候,此時表已經發生了改變,現在想要在每次插入資料之前檢測所有的入參是否都是小寫,此時可以用觸發器來檢測。發生改變通常是指update insert alter等操作 增刪改 其動作可以發生在增刪改之前或之後,觸發時間就是我們要寫的儲存...

理解T SQL 觸發器

觸發器是一種響應特定事件的特殊型別的儲存過程。有兩種型別的觸發器 資料定義語言 ddl 和資料操作語言 dml 觸發器。ddl能夠響應某種方式 create,alter,drop 修改資料庫結構時激發 dml是附加在特定表和檢視上的 程式不能顯式呼叫觸發器,觸發器 是某種事件產生後被自動執行。ddl...

理解T SQL 觸發器

觸發器是一種響應特定事件的特殊型別的儲存過程。有兩種型別的觸發器 資料定義語言 ddl 和資料操作語言 dml 觸發器。ddl能夠響應某種方式 create,alter,drop 修改資料庫結構時激發 dml是附加在特定表和檢視上的 程式不能顯式呼叫觸發器,觸發器 是某種事件產生後被自動執行。ddl...