觸發器的使用

2021-10-06 08:52:33 字數 1630 閱讀 8708

觸發器是乙個特殊的儲存過程,它的執行不是由程式呼叫,也不是手工啟動,而是當某一事件發生時觸發,例如當表執行deletet insert update時就會被執行。觸發器是用來維護表資料的完整性

觸發器分為:

after觸發器(之後觸發)

instead of 觸發器 (之前觸發)

觸發器裡有兩章特殊的表插入表(instered表)和刪除表(deleted表),這兩張是邏輯表也是虛表。有系統在記憶體中建立者兩張表,不會儲存在資料庫中。而且兩張表的都是唯讀的,只能讀取資料而不能修改資料。這兩張表的結果總是與被改觸發器應用的表的結構相同。當觸發器完成工作後,這兩張表就會被刪除。inserted表的資料是插入或是修改後的資料,而deleted表的資料是更新前的或是刪除的資料。

使用觸發器有如下優點:

自動執行。觸發器在對錶的數百據作了任何修改(比如手工輸入或者應用程度序的操作)之後立即被啟用。

級聯更新。觸發器可以通過資料庫中的相關表進行層疊更改,這比直接把問**寫在前台的做法更安全合理。

強化約束。觸發器可以引用其它表中的列,能夠實現答比check約束更為複雜的約束。

跟蹤變化。觸發器可以阻止資料庫中未經許可版的指定更新和變化。

強制業務邏輯。觸發器可用於執行管權理任務,並強制影響資料庫的複雜業務規則。

建立兩個表及關係

–新增–go

–create trigger tri_add

–on books for insert

–as– declare @typeid int

– select @typeid=typeid from inserted --系統自帶的表,儲存新增的資料

–update booktypes set nums=nums+1 where id=@typeid

–刪除–go

–create trigger tri_del

–on books for delete

–as– declare @typeid int

– select @typeid=typeid from deleted --系統自帶的表,儲存新增的資料

–update booktypes set nums=nums-1 where id=@typeid

–修改go

create trigger tri_upda

on books for update

asdeclare @typeid int

declare @newtypeid int

select @typeid=typeid from deleted

update booktypes set nums=nums-1 where id=@typeid

select @newtypeid=typeid from inserted

update booktypes set nums=nums+1 where id=@newtypeid

update books set typeid=2 where id=3

積分觸發器 mysql 觸發器的使用

將多個資料庫中的某列資料同步時需要用到mysql觸發器,以下可做參考,已簡單測試ok.修改紅棗的積分時觸發 drop trigger if exists u hongzaocount delimiter create trigger u hongzaocount after update on ho...

使用觸發器

觸發器 trigger 是個特殊的儲存過程 一般儲存過程主要通過儲存過程名而被直接呼叫,觸發器則是通過事件觸發執行。觸發器基於乙個表來建立並和乙個或多個資料修改操作 插入 更新或刪除 相關聯,可視作表的一部分。觸發器與資料庫中的表緊密相關,比如當對表執行insert update或delete操作時...

觸發器的使用!

可以定義乙個無論何時用insert語句向表中插入資料時都會執行的觸發器。當觸發insert觸發器時,新的資料行就會被插入到觸發器表和inserted表中。inserted表是乙個邏輯表,它包含了已經插入的資料行的乙個副本。inserted表包含了insert語句中已記錄的插入動作。inserted表...