資料庫系統概論 觸發器

2021-08-21 02:38:47 字數 2590 閱讀 3251

觸發器是一種特殊型別的儲存過程,它不同於之前的我們介紹的儲存過程。觸發器主要是通過事件進行觸發被自動呼叫執行的。而儲存過程可以通過儲存過程的名稱被呼叫。

1. 什麼是觸發器

觸發器對錶進行插入、更新、刪除的時候會自動執行的特殊儲存過程。觸發器一般用在check約束更加複雜的約束上面。觸發器和普通的儲存過程的區別是:觸發器是當對某乙個表進行操作。諸如:update、insert、delete這些操作的時候,系統會自動呼叫執行該錶上對應的觸發器。sql server 2005中觸發器可以分為兩類:dml觸發器和ddl觸發器,其中ddl觸發器它們會影響多種資料定義語言語句而激發,這些語句有create、alter、drop語句。

2.dml觸發器分為:

1、 after觸發器(之後觸發)

a、 insert觸發器

b、 update觸發器

c、 delete觸發器

2、 instead of 觸發器 (之前觸發)

其中after觸發器要求只有執行某一操作insert、update、delete之後觸發器才被觸發,且只能定義在表上。而instead of觸發器表示並不執行其定義的操作(insert、update、delete)而僅是執行觸發器本身。既可以在表上定義instead of觸發器,也可以在檢視上定義。

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

對錶的操作

inserted邏輯表

deleted邏輯表

增加記錄(insert)

存放增加的記錄

無刪除記錄(delete)

無存放被刪除的記錄

修改記錄(update)

存放更新後的記錄

存放更新前的記錄

update資料的時候就是先刪除表記錄,然後增加一條記錄。這樣在inserted和deleted表就都有update後的資料記錄了。注意的是:觸發器本身就是乙個事務,所以在觸發器裡面可以對修改資料進行一些特殊的檢查。如果不滿足可以利用事務回滾,撤銷操作。

3.定義觸發器

sql 使用create trigger 命令建立觸發器,其一般格式為

create trigger 《觸發器名》                          /*每當觸發事件發生時,該觸發器被啟用*/

《觸發事件》 on《表名》         /*指明觸發器啟用的時間是在執行觸發事件前或後*/

referencing newiold row as《變數》       /*referencing 指出引用的變數*/

for each                      /*定義觸發器的型別,指明動作體執行的頻率*/

[when 《觸發條件》] 《觸發動作體》                  /*僅當觸發條件為真時才執行觸發動作體*/

下面對定義觸發器的各部分語法進行詳細說明。

(1)   只有表的擁有者,即建立表的使用者才可以在表上建立觸發器,並且乙個表上只能建立一店數最的觸發器。觸發器的具體數量由具體的關係教據庫管現系統在設計好確定。

(2)觸發器名

觸發器名可以包含模式名,也可以不包含模式名。同模式下, 觸發器名必須是唯一的,並且觸發器名和表名必須在同一模式下。

(3)表名觸發器只能定義在基本表上,不能定義在檢視上。當基本表的資料發生變化時,將啟用定義在該錶上相應觸發事件的觸發器,因此該錶也稱為觸發器的目標表。

(4)觸發事件觸發事件可以是insert、delete或update,     也可以是這幾個事件的組合,如insert or delete等,還可以是update of 《觸發列,..>即進一步指明修改哪些列時啟用觸發器。after/before 是觸發的時機。after 表示在觸發事件的操作執行之後啟用觸發器;before表示在觸發事件的操作執行之前啟用觸發器。

(5)觸發器型別觸發器按照所觸發動作的間隔尺寸可以分為行級觸發器(for each row)和語句級觸發器(for each statement)。

(6)觸發條件觸發器被啟用時,只有當觸發條件為真時觸發動作體才執行,否則觸發動作體不執行,如果省略when觸發條件,則觸發動作體在觸發器激話後立即執行。

(7)觸發動作體

觸發動作體既可以是乙個匿名pl/sql過程塊,也可以是對已建立儲存過程的呼叫。如果是行級觸發器,使用者可以在過程體中使用new和old引用update/insert事件之後的新值和update/delete事件之前的舊值:如果是語句級觸發器,則不能在觸發動作中使用new成old進行引用。

如果觸發動作體執行失敗,啟用觸發器的事件(即對資料庫的增、刪、改操作)就會止執行,觸發器的目標表或觸發器可能影響的其他物件不發生任何變化。

資料庫系統概論 緒論 資料庫系統概論(一)

1.1 資料庫系統概論 1.1.1 資料庫系統概論 1.資料 描述事物的符號記錄稱為是資料 資料的解釋叫做語義,他與資料時密不可分的 記錄是計算機中表示和儲存資料的一種格式或者乙個方法 2.資料庫 把資料以一定的格式存放在計算機儲存裝置上的倉庫就是資料庫 共享性 有組織 永久儲存是資料庫的三大特徵 ...

資料庫系統概論

資料庫系統概論 1 現實世界的資料化過程 現實世界是由實際存在的事物組成的。每種事物都有無窮的特性,事物之間有著錯綜複雜的聯絡。資訊世界是現實世界在人腦中的反映。現實世界中的事物和事物特性在資訊世界中分別反映為實體和實體的屬性。資訊世界是由實體組成的,每種實體都有自己有限的屬性。本質上說,實體是由有...

《資料庫系統概論》

一 概述 1.關係模型的組成 資料結構 二維表 關係 資料庫中全部資料以及資料間的聯絡都以關係來表示。資料操作 增 刪 改 查 資料的約束條件 實體完整性,參照完整性,使用者自定義的完整性。2.關係的資料結構 域 是一組既有相同資料類的值的集合,又稱值域。域中所包含值的個數稱為域的基數。笛卡爾積 所...