觸發器臨時表Inserted deleted

2021-05-22 01:39:03 字數 2608 閱讀 5158

觸發器語句中使用了兩種特殊的表:deleted 表和 inserted 表。microsoft® sql server 2000 自動建立和管理這些表。可以使用這兩個臨時的駐留記憶體的表測試某些資料修改的效果及設定觸發器操作的條件;然而,不能直接對錶中的資料進行更改。

inserted和deleted表主要用於觸發器中:

·擴充套件表間引用完整性

·在以檢視為基礎的基表中插入或更新資料

·檢查錯誤並基於錯誤採取行動

找到資料修改前後表狀態的差異,並基於此差異採取行動。

deleted表用於儲存delete和update語句所影響的行的複本。在執行 delete或update語句時,行從觸發器表中刪除,並傳輸到deleted表中。deleted表和觸發器表通常沒有相同的行。

inserted表用於儲存insert和update語句所影響的行的副本。在乙個插入或更新事務處理中,新建行被同時新增到inserted表 和觸發器表中。inserted表中的行是觸發器表中新行的副本。

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

在設定觸發器條件時,應當為引發觸發器的操作恰當使用 inserted 和 deleted 表。雖然在測試 insert 時引用 deleted 表或在測試 delete 時引用 inserted 表不會引起任何錯誤,但是在這種情形下這些觸發器測試表中不會包含任何行。

說明:如果觸發器操作取決於乙個資料修改所影響的行數,應該為多行資料修改(基於 select 語句的 insert、delete 或 update)使用測試(如檢查 @@rowcount),然後採取相應的對策。

sql server™ 2000 不允許 after 觸發器引用 inserted 和 deleted 表中的 text、ntext 或 image 列;然而,允許 instead of 觸發器引用這些列。有關更多資訊,請參見 create trigger。

在 instead of 觸發器中使用 inserted 和 deleted 表

傳遞到在表上定義的 instead of 觸發器的 inserted 和 deleted 表遵從與傳遞到 after 觸發器的 inserted 和 deleted 表相同的規則。inserted 和 deleted 表的格式與在其上定義 instead of 觸發器的表的格式相同。inserted 和 deleted 表中的每一列都直接對映到基表中的列。

有關引用帶 instead of 觸發器的表的 insert 或 update 語句何時必須提供列值的規則與表沒有 instead of 觸發器時相同:

不能為計算列或具有 timestamp 資料型別的列指定值。

不能為具有 identity 屬性的列指定值,除非該列的 identity_insert 為 on。當 identity_insert 為 on 時,insert 語句必須提供乙個值。

insert 語句必須為所有無 default 約束的 not null 列提供值。

對於除計算列、標識列或 timestamp 列以外的任何列,任何允許空值的列或具有 default 定義的 not null 列的值都是可選的。

當insert、update 或 delete 語句引用具有 instead of 觸發器的檢視時,資料庫引擎將呼叫該觸發器,而不是對任何表採取任何直接操作。即使為檢視生成的 inserted 和 deleted 表中的資訊格式與基表中的資料格式不同,該觸發器在生成執行基表中的請求操作所需的任何語句時,仍必須使用 inserted 和 deleted 表中的資訊。

傳遞到在檢視上定義的 instead of 觸發器的 inserted 和 deleted **式與為該檢視定義的 select 語句的選擇列表相匹配。例如:

create    view    employeenames    (employeeid,    lname,    fname)   

as   

select    employeeid,    lastname,    firstname   

from    northwind.dbo.employees

檢視的結果集有三列:乙個 int 列和兩個 nvarchar 列。傳遞到在檢視上定義的 instead of 觸發器的 inserted 和 deleted 表也具有名為 employeeid 的 int 列、名為 lname 的 nvarchar 列和名為 fname 的 nvarchar 列。

檢視的選擇列表還包含不直接對映到單個基表列的表示式。一些檢視表示式(如常量呼叫或函式呼叫)可能不引用任何列,這類表示式會被忽略。複雜的表達 式會引用多列,但在 inserted 和 deleted 表中,每個插入的行僅有乙個值。如果檢視中的簡單表示式引用具有複雜表示式的計算列,則這些簡單表示式也有同樣的問題。檢視上的 instead of 觸發器必須處理這些型別的表示式。有關更多資訊,請參見檢視上 instead of 觸發器中的表示式和計算列。

順便說一下,當對某張表建立觸發器後,分3種情況討論

1.插入操作(insert)

inserted表有資料,deleted表無資料

2.刪除操作(delete)

inserted表無資料,deleted表有資料

3.更新操作(update)

inserted表有資料(新資料),deleted表有資料(舊資料)

mysql 觸發器 臨時表 Mysql觸發器

mysql觸發器 1.建立觸發器 注意 觸發器只能建立在永久表上,不能對臨時表建立觸發器,語法如下 create trigger trigger name trigger time trigger event on table name for each row trigger stmt trigg...

SQLSERVER觸發器之臨時表

sql觸發器中,系統自動會生成兩張臨時表,分別是deleted 和 inserted 它們是邏輯 概念 表。也可理解為是臨時表。為方便理解,可以這麼來認為inserted表和deleted表的作用 inserted表就是放新的記錄,delete表就是放舊的記錄。並且,它們的表結構與原表是完全相同的。...

觸發器 mysql觸發器

觸發器是一種特殊的儲存過程,它在插入 刪除或修改特定表中的資料時觸發執行,它比資料庫本身標準的功能有更精細和更複雜的資料控制能力。和儲存過程一樣,很少使用。1 觸發器的作用 2 建立觸發器 建立測試環境 mysql create database test db query ok,1 row aff...