資料庫基礎之觸發器

2021-08-19 17:47:19 字數 2545 閱讀 8570

1.定義:觸發器(trigger)是與表事件相關的特殊的儲存過程,它的執行是由事件來觸發。觸發器經常用於加強資料的完整性約束和業務規則等。

2.觸發器和儲存過程的區別:觸發器與儲存過程的唯一區別是觸發器不能執行execute語句呼叫,而是在使用者執行transact-sql語句時自動觸發執行。

3.作用:

①加強資料的完整性約束(與check約束的區別:觸發器通過sql支援更複雜的約束,可以引用其他表中的列,可以自定義錯誤訊息)

②強**從業務規則

4.分類:

4.1 dml(資料操作語言,data manipulation language)觸發器       

功能

after 觸發器

instead of 觸發器

適用範圍

表和檢視

每個表或檢視包含觸發器的數量

每個觸發操作(update、delete 和 insert)包含多個觸發器

每個觸發操作(update、delete 和 insert)包含乙個觸發器

級聯引用

無任何限制條件

不允許在作為級聯引用完整性約束目標的表上使用 instead of update 和 delete 觸發器。

執行

晚於:

早於:

替代:

晚於:

執行順序

可指定第乙個和最後乙個執行

不適用

插入的刪除的表中的

varchar(max)、

nvarchar(max) 和

varbinary(max) 列引用。

允許

允許

插入的刪除的表中的

text、

ntext 和

image 列引用。

不允許

允許

4.2 ddl(資料定義語言,data definition language)觸發器

它是sql server2005新增的觸發器,主要用於審核與規範對資料庫中表,觸發器,檢視等結構上的操作。比如在修改表,修改列,新增表,新增列等。

它在資料庫結構發生變化時執行,我們主要用它來記錄資料庫的修改過程,以及限制程式設計師對資料庫的修改,比如不允許刪除某些指定表等。

4.3 登入觸發器

登入觸發器將為響應 login 事件而激發儲存過程。與 sql server 例項建立使用者會話時將引發此事件。登入觸發器將在登入的身份驗證階段完成之後且使用者會話實際建立之前激發。

因此,來自觸發器內部且通常將到達使用者的所有訊息(例如錯誤訊息和來自 print 語句的訊息)會傳送到 sql server 錯誤日誌。如果身份驗證失敗,將不激發登入觸發器。

5.語法

建立dml觸發器

create trigger [ schema_name . ]trigger_name 

on  

--for預設為after

as /*要執行的sql

*/6.使用插入和刪除的表

dml 觸發器語句使用兩種特殊的表:deleted 表和 inserted 表。sql server 會自動建立和管理這兩種表。

您可以使用這兩種駐留記憶體的臨時表來測試特定資料修改的影響以及設定 dml 觸發器操作條件。

但不能直接修改表中的資料或對錶執行資料定義語言 (ddl) 操作,例如 create index。

deleted 表用於儲存 delete 和 update 語句所影響的行的副本。在執行 delete 或 update 語句的過程中,行從觸發器表中刪除,並傳輸到 deleted 表中。

inserted 表用於儲存 insert 和 update 語句所影響的行的副本。在執行插入或更新事務的過程中,新行會同時新增到 inserted 表和觸發器表中。

更新事務類似於在刪除操作之後執行插入操作;首先,舊行被複製到 deleted 表中,然後,新行被複製到觸發器表和 inserted 表中。

如:create trigger triggername

on tablename

for insert,update,delete

asdeclare @insertedcount int

declare @deletedcount int

set @insertedcount=(select count(*)from inserted)--使用inserted臨時表

set @deletedcount=(select count(*)from deleted)--使用deleted臨時表

if (@insertedcount>0)

begin

raiserror('不能插入或修改!',16,8)--自定義錯誤提示

rollbacktran--回滾

endelse if(@deletedcount>0)

begin

--tsql

end

資料庫之 觸發器 基礎

觸發器概述 特殊程式 與函式和儲存過程類似,都屬於pl sql塊 不可以直接呼叫,只能是某種事件觸發 分類 ddl觸發器 dml觸發器 instead of觸發器 替代某個動作的觸發器 系統觸發器 對系統訪問進行控制 觸發器body部分不可以超過32760位元組 一般情況下,非系統觸發器是不能直接呼...

資料庫基礎 觸發器

觸發器是在對錶進行插入 更新或刪除操作時自動執行的儲存過程 觸發器通常用於強制業務規則 觸發器是一種高階約束,可以定義比 check 約束更為複雜的約束 可執行複雜的 sql 語句 if while case 可引用其它表中的列 觸發器定義在特定的表上,與表相關 自動觸發執行 不能直接呼叫 是乙個事...

資料庫之觸發器

觸發器 看到這個名字總是會想到數電中學過的觸發器,有輸入端和輸出端,根據電平的高低來觸發。資料庫中的觸發器是個特殊的儲存過程,主要是通過事件進行觸發而被執行的,而儲存過程可以通過儲存過程名稱而被直接呼叫。作用 使用t sql語句進行複雜的邏輯處理,基於乙個表建立,但是可以對多個表進行操作,因此常常用...