日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
如何查詢SQL數(shù)據(jù)庫(kù)中的觸發(fā)器?(查詢sql數(shù)據(jù)庫(kù)中的觸發(fā)器)

在數(shù)據(jù)庫(kù)中,觸發(fā)器(Trigger)是由一些預(yù)定義的SQL語(yǔ)句組成的程序,它們可以在特定的條件下自動(dòng)地執(zhí)行某些SQL語(yǔ)句。通過(guò)使用觸發(fā)器,我們可以對(duì)數(shù)據(jù)庫(kù)的一些操作進(jìn)行自動(dòng)化控制,從而提高數(shù)據(jù)庫(kù)的利用效率。在本文中,我們將介紹如何查詢SQL數(shù)據(jù)庫(kù)中的觸發(fā)器。

SQL Server中的觸發(fā)器

在SQL Server數(shù)據(jù)庫(kù)中,觸發(fā)器是存儲(chǔ)在獨(dú)立對(duì)象中的特殊存儲(chǔ)過(guò)程。我們可以使用以下命令查詢當(dāng)前數(shù)據(jù)庫(kù)中的觸發(fā)器:

“`sql

SELECT

name,

crdate,

crmodate

FROM

sysobjects

WHERE

xtype = ‘TR’

“`

其中,`xtype = ‘TR’`表示查詢數(shù)據(jù)庫(kù)中類型為觸發(fā)器(TR)的對(duì)象。

以上命令將返回當(dāng)前數(shù)據(jù)庫(kù)中所有觸發(fā)器的名稱、創(chuàng)建日期和修改日期。

我們也可以通過(guò)以下命令查詢指定表中的觸發(fā)器:

“`sql

SELECT

name,

crdate,

crmodate

FROM

sysobjects

WHERE

xtype = ‘TR’ AND

parent_obj = OBJECT_ID(‘tablename’)

“`

其中,`parent_obj = OBJECT_ID(‘tablename’)`表示查詢某個(gè)表中的觸發(fā)器。

以上命令將返回指定表中所有觸發(fā)器的名稱、創(chuàng)建日期和修改日期。

MySQL中的觸發(fā)器

在MySQL數(shù)據(jù)庫(kù)中,我們可以通過(guò)以下命令查詢當(dāng)前數(shù)據(jù)庫(kù)中的觸發(fā)器:

“`sql

SHOW TRIGGERS FROM databasename;

“`

其中,`databasename`表示數(shù)據(jù)庫(kù)名稱。

以上命令將返回當(dāng)前數(shù)據(jù)庫(kù)中所有觸發(fā)器的名稱、觸發(fā)事件、觸發(fā)時(shí)機(jī)、執(zhí)行語(yǔ)句和創(chuàng)建者。

我們也可以通過(guò)以下命令查詢指定表中的觸發(fā)器:

“`sql

SHOW TRIGGERS FROM databasename WHERE `Table` = ‘tablename’;

“`

其中,`tablename`表示需要查詢的表名稱。

以上命令將返回指定表中所有觸發(fā)器的名稱、觸發(fā)事件、觸發(fā)時(shí)機(jī)、執(zhí)行語(yǔ)句和創(chuàng)建者。

通過(guò)以上命令,我們可以查詢到當(dāng)前數(shù)據(jù)庫(kù)或指定表中的所有觸發(fā)器,并獲取它們的相關(guān)信息。對(duì)于不同的數(shù)據(jù)庫(kù),查詢語(yǔ)句可能會(huì)有所不同,但基本原理是相同的。我們可以根據(jù)實(shí)際情況,選用不同的方法查詢數(shù)據(jù)庫(kù)中的觸發(fā)器,以便更好地管理和控制數(shù)據(jù)。

成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗(yàn)豐富以策略為先導(dǎo)10多年以來(lái)專注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),響應(yīng)式網(wǎng)站制作,設(shè)計(jì)師量身打造品牌風(fēng)格,熱線:028-86922220

SQL中,觸發(fā)器是什么?

觸發(fā)器(trigger)是個(gè)特殊的存儲(chǔ)過(guò)程,它的執(zhí)行不是由程序調(diào)用,也不是手工啟動(dòng),而是由事件來(lái)觸發(fā),比如當(dāng)對(duì)一個(gè)表進(jìn)行操作( insert,delete, update)時(shí)就會(huì)激活它執(zhí)行。觸發(fā)器經(jīng)常用于加強(qiáng)數(shù)據(jù)的完整性約束和業(yè)務(wù)規(guī)則等。 觸發(fā)器可以從 DBA_TRIGGERS ,USER_TRIGGERS 數(shù)據(jù)字典中查到。

觸發(fā)悶侍櫻器可以查詢其他表,而且可以包含復(fù)雜的 SQL語(yǔ)句。它們主要用于強(qiáng)制服從復(fù)雜的業(yè)務(wù)規(guī)則或要求。例如:您可以根據(jù)客戶當(dāng)前的帳戶狀態(tài),控制是否允許插入新訂單。

  觸發(fā)器分為DML觸發(fā)器、DDL觸發(fā)器

  DML觸發(fā)器:當(dāng)數(shù)據(jù)庫(kù)中表中的數(shù)據(jù)發(fā)生變化時(shí),包括insert,update,delete任意操作,如果我們對(duì)該表寫(xiě)了對(duì)應(yīng)的DML觸發(fā)器,那么該觸發(fā)器自動(dòng)執(zhí)行。DML觸發(fā)器的主要作用在螞叢于強(qiáng)制執(zhí)行業(yè) 務(wù)規(guī)則,以及擴(kuò)展Sql Server約束,默認(rèn)值等。因?yàn)槲覀冎兰s束只能約束同一個(gè)表中的數(shù)據(jù),而觸發(fā)談滑器中則可以執(zhí)行任意Sql命令。

DDL觸發(fā)器:它是Sql Server2023新增的觸發(fā)器,主要用于審核與規(guī)范對(duì)數(shù)據(jù)庫(kù)中表,觸發(fā)器,視圖等結(jié)構(gòu)上的操作。比如在修改表,修改列,新增表,新增列等。它在數(shù)據(jù)庫(kù)結(jié)構(gòu)發(fā)生變化時(shí)執(zhí)行,我們主要用它來(lái)記錄數(shù)據(jù)庫(kù)的修改過(guò)程,以及限制程序員對(duì)數(shù)據(jù)庫(kù)的修改,比如不允許刪除某些指定表等。

希望你看完我的解釋你能對(duì)觸發(fā)器有一定了解。

1、觸發(fā)器。 定義: 何為觸發(fā)器?在SQL Server里面也就是對(duì)某一個(gè)表的一定的操作,觸發(fā)某種條件,從而執(zhí)行的一段程序。觸發(fā)器是一個(gè)特殊的存儲(chǔ)過(guò)程。 常見(jiàn)的觸發(fā)器有三種:分別應(yīng)用于Insert , Update , Delete 事件。(SQL Server 2023定義了新的觸發(fā)器,這里不提) 我為什么要使用觸發(fā)器?比如,這么兩個(gè)表: Create Table Student(-學(xué)生表StudentID int primary key,學(xué)號(hào)…. ) Create Table BorrowRecord(–學(xué)生借書(shū)記錄表BorrowRecord int identity(1,1),流水號(hào)StudentID int ,學(xué)號(hào)BorrowDate datetime, –借出時(shí)間ReturnDAte Datetime, –歸還時(shí)間… ) 用到的功能有:.如果我更改了學(xué)生的學(xué)號(hào),我希望他的借書(shū)記錄仍然與這個(gè)學(xué)生相關(guān)(也就是同時(shí)更改借書(shū)記錄表的學(xué)號(hào));.如果該學(xué)生已經(jīng)畢業(yè),我希望刪除他的學(xué)號(hào)的同時(shí),也刪除它的借書(shū)記錄。 等等。 這時(shí)候可以用到觸發(fā)器。對(duì)于1,創(chuàng)建一個(gè)Update觸發(fā)器: Create Trigger truStudent On Student for UpdateName:truStudent –func:更新BorrowRecord 的StudentID,行和與Student同步。 –Use :None –User:System –Author: 懶蟲(chóng) # SapphireStudio (

www.chair3.com

) –Date : –Memo : 臨時(shí)寫(xiě)寫(xiě)的,給大家作個(gè)Sample。沒(méi)有調(diào)試阿。As if Update(StudentID) beginUpdate BorrowRecordSet br.StudentID=i.StudentIDFrom BorrowRecord br , Deleted d ,Inserted iWhere br.StudentID=d.StudentID end理解觸發(fā)器里面的兩個(gè)臨時(shí)的表渣數(shù):Deleted , Inserted 。注意Deleted 與Inserted分別表檔梁盯示觸發(fā)事件的表“舊的一條記錄”和“新的一條記錄”。 一個(gè)Update 的過(guò)程可以看作為:生成新的記錄到Inserted表,復(fù)制舊的記錄到Deleted表,然后刪除Student記錄并寫(xiě)入新紀(jì)錄。 對(duì)于2,創(chuàng)建一個(gè)Delete觸發(fā)器 Create trigger trdStudent On Student for DeleteName:trdStudent –func:同時(shí)刪除 BorrowRecord 的數(shù)據(jù) –Use :None –User:System –Author: 懶蟲(chóng) # SapphireStudio (

www.chair3.com

) –Date : –Memo : 臨時(shí)寫(xiě)寫(xiě)的,給大家作個(gè)Sample。沒(méi)有調(diào)試阿。As Delete BorrowRecordFrom BorrowRecord br , Delted dWhere br.StudentID=d.StudentID 從這兩個(gè)例子我們可以看到了觸發(fā)器的關(guān)鍵:A.2個(gè)臨時(shí)的表;B.觸發(fā)機(jī)制。 這里我們只講解最簡(jiǎn)單的觸發(fā)器。復(fù)雜的容后說(shuō)明。 事實(shí)上,我不鼓勵(lì)使用觸發(fā)器。觸發(fā)器的初始設(shè)計(jì)思想,已經(jīng)被“級(jí)聯(lián)”所替代。

CREATE TRIGGER

創(chuàng)建觸發(fā)器,觸發(fā)器是一種特殊的存儲(chǔ)過(guò)程,在用戶試圖對(duì)指定的表執(zhí)行指定的數(shù)據(jù)修改語(yǔ)句時(shí)自動(dòng)執(zhí)行。Microsoft? SQL Server? 允許為任何給定的 INSERT、UPDATE 或 DELETE 語(yǔ)句創(chuàng)建多個(gè)觸發(fā)器。

語(yǔ)法

CREATE TRIGGER trigger_name

ON { table | view }

{

{ { FOR | AFTER | INSTEAD OF } { }

AS

| IF ( COLUMNS_UPDATED ( ) { bitwise_operator } updated_bitmask )

{ comparison_operator } column_bitmask

} >

sql_statement

}

}

參數(shù)

trigger_name

是觸發(fā)器的名稱。觸發(fā)器名稱必須符合標(biāo)識(shí)符規(guī)則,并且在數(shù)據(jù)庫(kù)中必須唯一??梢赃x擇是否指定觸發(fā)器所有者名稱。

Table | view

是在其上執(zhí)行觸發(fā)器的表或視圖,有時(shí)稱為觸發(fā)器表或觸發(fā)器視圖??梢赃x擇是否指定表或視圖的所有者名稱。

WITH ENCRYPTION

加密 syscomments 表中包含 CREATE TRIGGER 語(yǔ)句文本的條目。使用 WITH ENCRYPTION 可防止將觸發(fā)器作為 SQL Server 復(fù)制的一部分發(fā)布。

AFTER

指定觸發(fā)器只有在觸發(fā) SQL 語(yǔ)句中指定的所有操作都已成功執(zhí)行后才激發(fā)。所有的引用級(jí)聯(lián)操作和約束檢查也必須成功完成后,才能執(zhí)行此觸發(fā)器。

如果僅指定 FOR 關(guān)鍵字,則 AFTER 是默認(rèn)設(shè)置。

不能在視圖上定義 AFTER 觸發(fā)器。

INSTEAD OF

指定執(zhí)行觸發(fā)器而不是執(zhí)行觸發(fā) SQL 語(yǔ)句,從而替代觸發(fā)語(yǔ)句的操州迅兄作。

在表或視圖上,每個(gè) INSERT、UPDATE 或 DELETE 語(yǔ)句最多可以定義一個(gè) INSTEAD OF 觸發(fā)器。然而,可以在每個(gè)具有 INSTEAD OF 觸發(fā)器的視圖上定義視圖。

INSTEAD OF 觸發(fā)器不能在 WITH CHECK OPTION 的可更新視圖上定義。如果向指定了 WITH CHECK OPTION 選項(xiàng)的可更新視圖添加 INSTEAD OF 觸發(fā)器,SQL Server 將產(chǎn)生一個(gè)錯(cuò)誤。用戶必須用 ALTER VIEW 刪除該選項(xiàng)后才能定義 INSTEAD OF 觸發(fā)器。

{ }

是指定在表或視圖上執(zhí)行哪些數(shù)據(jù)修改語(yǔ)句時(shí)將激活觸發(fā)器的關(guān)鍵字。必須至少指定一個(gè)選項(xiàng)。在觸發(fā)器定義中允許使用以任意順序組合的這些關(guān)鍵字。如果指定的選項(xiàng)多于一個(gè),需用逗號(hào)分隔這些選項(xiàng)。

對(duì)于 INSTEAD OF 觸發(fā)器,不允許在具有 ON DELETE 級(jí)聯(lián)操作引用關(guān)系的表上使用 DELETE 選項(xiàng)。同樣,也不允許在具有 ON UPDATE 級(jí)聯(lián)操作引用關(guān)系的表上使用 UPDATE 選項(xiàng)。

WITH APPEND

指定應(yīng)該添加現(xiàn)有類型的其它觸發(fā)器。只有當(dāng)兼容級(jí)別是 65 或更昌鉛低時(shí),才需要使用該可選子句。如果兼容級(jí)別是 70 或更高,則不必使用 WITH APPEND 子句添加現(xiàn)有類型的其它觸發(fā)器(這是兼容級(jí)別設(shè)置為 70 或更高的 CREATE TRIGGER 的默認(rèn)行為)。有關(guān)更多信息,請(qǐng)參見(jiàn) sp_dbcmptlevel。

WITH APPEND 不能與 INSTEAD OF 觸發(fā)器一起使用,或者,如果顯式聲明 AFTER 觸發(fā)器,也不能使用該子句。只有當(dāng)出于向后兼容而指定 FOR 時(shí)(沒(méi)有 INSTEAD OF 或 AFTER),才能使用 WITH APPEND。冊(cè)襲以后的版本將不支持 WITH APPEND 和 FOR(將被解釋為 AFTER)。

NOT FOR REPLICATION

表示當(dāng)復(fù)制進(jìn)程更改觸發(fā)器所涉及的表時(shí),不應(yīng)執(zhí)行該觸發(fā)器。

AS

是觸發(fā)器要執(zhí)行的操作。

sql_statement

是觸發(fā)器的條件和操作。觸發(fā)器條件指定其它準(zhǔn)則,以確定 DELETE、INSERT 或 UPDATE 語(yǔ)句是否導(dǎo)致執(zhí)行觸發(fā)器操作。

當(dāng)嘗試 DELETE、INSERT 或 UPDATE 操作時(shí),Transact-SQL語(yǔ)句中指定的觸發(fā)器操作將生效。

觸發(fā)器可以包含任意數(shù)量和種類的 Transact-SQL 語(yǔ)句。觸發(fā)器旨在根據(jù)數(shù)據(jù)修改語(yǔ)句檢查或更改數(shù)據(jù);它不應(yīng)將數(shù)據(jù)返回給用戶。觸發(fā)器中的 Transact-SQL 語(yǔ)句常常包含控制流語(yǔ)言。CREATE TRIGGER 語(yǔ)句中使用幾個(gè)特殊的表:

deleted 和 inserted 是邏輯(概念)表。這些表在結(jié)構(gòu)上類似于定義觸發(fā)器的表(也就是在其中嘗試用戶操作的表);這些表用于保存用戶操作可能更改的行的舊值或新值。例如,若要檢索 deleted 表中的所有值,請(qǐng)使用:

SELECT *

FROM deleted

如果兼容級(jí)別等于 70,那么在 DELETE、INSERT 或 UPDATE 觸發(fā)器中,SQL Server 將不允許引用 inserted 和 deleted 表中的 text、ntext 或 image 列。不能訪問(wèn) inserted 和 deleted 表中的 text、ntext 和 image 值。若要在 INSERT 或 UPDATE 觸發(fā)器中檢索新值,請(qǐng)將 inserted 表與原始更新表聯(lián)接。當(dāng)兼容級(jí)別是 65 或更低時(shí),對(duì) inserted 或 deleted 表中允許空值的text、ntext 或 image 列,將返回空值;如果這些列不可為空,則返回零長(zhǎng)度字符串。

當(dāng)兼容級(jí)別是 80 或更高時(shí),SQL Server 允許在表或視圖上通過(guò) INSTEAD OF 觸發(fā)器更新 text、ntext 或 image 列。

n

是表示觸發(fā)器中可以包含多條 Transact-SQL 語(yǔ)句的占位符。對(duì)于 IF UPDATE (column) 語(yǔ)句,可以通過(guò)重復(fù) UPDATE (column) 子句包含多列。

IF UPDATE (column)

測(cè)試在指定的列上進(jìn)行的 INSERT 或 UPDATE 操作,不能用于 DELETE 操作??梢灾付ǘ嗔小R?yàn)樵?ON 子句中指定了表名,所以在 IF UPDATE 子句中的列名前不要包含表名。若要測(cè)試在多個(gè)列上進(jìn)行的 INSERT 或 UPDATE 操作,請(qǐng)?jiān)谥粋€(gè)操作后指定單獨(dú)的 UPDATE(column) 子句。在 INSERT 操作中 IF UPDATE 將返回 TRUE 值,因?yàn)檫@些列插入了顯式值或隱性 (NULL) 值。

說(shuō)明 IF UPDATE (column) 子句的功能等同于 IF、IF…ELSE 或 WHILE 語(yǔ)句,并且可以使用 BEGIN…END 語(yǔ)句塊。有關(guān)更多信息,請(qǐng)參見(jiàn)控制流語(yǔ)言。

可以在觸發(fā)器主體中的任意位置使用 UPDATE (column)。

column

是要測(cè)試 INSERT 或 UPDATE 操作的列名。該列可以是 SQL Server 支持的任何數(shù)據(jù)類型。但是,計(jì)算列不能用于該環(huán)境中。有關(guān)更多信息,請(qǐng)參見(jiàn)數(shù)據(jù)類型。

IF (COLUMNS_UPDATED())

測(cè)試是否插入或更新了提及的列,僅用于 INSERT 或 UPDATE 觸發(fā)器中。COLUMNS_UPDATED 返回 varbinary 位模式,表示插入或更新了表中的哪些列。

COLUMNS_UPDATED 函數(shù)以從左到右的順序返回位,最左邊的為最不重要的位。最左邊的位表示表中的之一列;向右的下一位表示第二列,依此類推。如果在表上創(chuàng)建的觸發(fā)器包含 8 列以上,則 COLUMNS_UPDATED 返回多個(gè)字節(jié),最左邊的為最不重要的字節(jié)。在 INSERT 操作中 COLUMNS_UPDATED 將對(duì)所有列返回 TRUE 值,因?yàn)檫@些列插入了顯式值或隱性 (NULL) 值。

可以在觸發(fā)器主體中的任意位置使用 COLUMNS_UPDATED。

bitwise_operator

是用于比較運(yùn)算的位運(yùn)算符。

updated_bitmask

是整型位掩碼,表示實(shí)際更新或插入的列。例如,表 t1 包含列 C1、C2、C3、C4 和 C5。假定表 t1 上有 UPDATE 觸發(fā)器,若要檢查列 C2、C3 和 C4 是否都有更新,指定值 14;若要檢查是否只有列 C2 有更新,指定值 2。

comparison_operator

是比較運(yùn)算符。使用等號(hào) (=) 檢查 updated_bitmask 中指定的所有列是否都實(shí)際進(jìn)行了更新。使用大于號(hào) (>) 檢查 updated_bitmask 中指定的任一列或某些列是否已更新。

column_bitmask

是要檢查的列的整型位掩碼,用來(lái)檢查是否已更新或插入了這些列。

注釋

觸發(fā)器常常用于強(qiáng)制業(yè)務(wù)規(guī)則和數(shù)據(jù)完整性。SQL Server 通過(guò)表創(chuàng)建語(yǔ)句(ALTER TABLE 和 CREATE TABLE)提供聲明引用完整性 (DRI);但是 DRI 不提供數(shù)據(jù)庫(kù)間的引用完整性。若要強(qiáng)制引用完整性(有關(guān)表的主鍵和外鍵之間關(guān)系的規(guī)則),請(qǐng)使用主鍵和外鍵約束(ALTER TABLE 和 CREATE TABLE 的 PRIMARY KEY 和 FOREIGN KEY 關(guān)鍵字)。如果觸發(fā)器表存在約束,則在 INSTEAD OF 觸發(fā)器執(zhí)行之后和 AFTER 觸發(fā)器執(zhí)行之前檢查這些約束。如果違反了約束,則回滾 INSTEAD OF 觸發(fā)器操作且不執(zhí)行(激發(fā))AFTER 觸發(fā)器。

可用 sp_settriggerorder 指定表上之一個(gè)和最后一個(gè)執(zhí)行的 AFTER 觸發(fā)器。在表上只能為每個(gè) INSERT、UPDATE 和 DELETE 操作指定一個(gè)之一個(gè)執(zhí)行和一個(gè)最后一個(gè)執(zhí)行的 AFTER 觸發(fā)器。如果同一表上還有其它 AFTER 觸發(fā)器,則這些觸發(fā)器將以隨機(jī)順序執(zhí)行。

如果 ALTER TRIGGER 語(yǔ)句更改了之一個(gè)或最后一個(gè)觸發(fā)器,則將除去已修改觸發(fā)器上設(shè)置的之一個(gè)或最后一個(gè)特性,而且必須用 sp_settriggerorder 重置排序值。

只有當(dāng)觸發(fā) SQL 語(yǔ)句(包括所有與更新或刪除的對(duì)象關(guān)聯(lián)的引用級(jí)聯(lián)操作和約束檢查)成功執(zhí)行后,AFTER 觸發(fā)器才會(huì)執(zhí)行。AFTER 觸發(fā)器檢查觸發(fā)語(yǔ)句的運(yùn)行效果,以及所有由觸發(fā)語(yǔ)句引起的 UPDATE 和 DELETE 引用級(jí)聯(lián)操作的效果。

觸發(fā)器是對(duì)表進(jìn)行插入、更新、刪除的時(shí)候會(huì)自動(dòng)執(zhí)行的特殊存儲(chǔ)過(guò)程。手戚

觸發(fā)器一般用在check約束更加復(fù)雜的約束上面。例如在執(zhí)行update、insert、delete這些操作的時(shí)候,系統(tǒng)會(huì)自動(dòng)調(diào)用執(zhí)行該表上對(duì)應(yīng)的觸發(fā)器。

SQL Server 2023中觸發(fā)器可以分為兩類:DML觸發(fā)器和DDL觸發(fā)器,其中DDL觸發(fā)器它們會(huì)影響多種數(shù)據(jù)定義語(yǔ)言語(yǔ)句而激發(fā),這些語(yǔ)句有create、alter、drop語(yǔ)句。

DML觸發(fā)器分為:

1、 after觸發(fā)器(之后觸發(fā))

a、 insert觸發(fā)器

b、 update觸發(fā)器

c、 delete觸發(fā)器

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

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

觸發(fā)器有兩個(gè)特殊的表:插入表(instered表)和刪除表(deleted表)。這兩張是邏輯表也是虛表。有系統(tǒng)在內(nèi)存中創(chuàng)建者兩張表,不會(huì)存儲(chǔ)在數(shù)據(jù)庫(kù)中。而且兩張表的都是只讀的,只能讀取鬧斗數(shù)據(jù)而不能修改數(shù)據(jù)。這兩張表的結(jié)果總是與被改觸發(fā)器應(yīng)用的表的結(jié)構(gòu)相同。當(dāng)觸發(fā)器完成工作后,這兩張表就會(huì)被刪除。Inserted表的數(shù)據(jù)是插入或是修改后的數(shù)據(jù),而deleted表的數(shù)據(jù)是更新前的或是刪除的數(shù)據(jù)。

Update數(shù)據(jù)的時(shí)候就是先刪除表記錄,然后增加一條記錄。這樣在inserted和deleted表就都有update后的數(shù)據(jù)記錄了。注意的是:觸發(fā)器本身就是一個(gè)事務(wù),所以在觸發(fā)器畢彎陵里面可以對(duì)修改數(shù)據(jù)進(jìn)行一些特殊的檢查。如果不滿足可以利用事務(wù)回滾,撤銷(xiāo)操作。

觸發(fā)器是對(duì)表進(jìn)行插入、更新、刪除的時(shí)候會(huì)自動(dòng)執(zhí)行的特殊存儲(chǔ)過(guò)程。手戚

觸發(fā)器一般用在check約束更加復(fù)雜的約束上面。例如在執(zhí)行update、insert、delete這些操作的時(shí)候,系統(tǒng)會(huì)自動(dòng)調(diào)用執(zhí)行該表上對(duì)應(yīng)的觸發(fā)器。

SQL Server 2023中觸發(fā)器可以分為兩類:DML觸發(fā)器和DDL觸發(fā)器,其中DDL觸發(fā)器它們會(huì)影響多種數(shù)據(jù)定義語(yǔ)言語(yǔ)句而激發(fā),這些語(yǔ)句有create、alter、drop語(yǔ)句。

DML觸發(fā)器分為:

1、 after觸發(fā)器(之后觸發(fā))

a、 insert觸發(fā)器

b、 update觸發(fā)器

c、 delete觸發(fā)器

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

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

觸發(fā)器有兩個(gè)特殊的表:插入表(instered表)和刪除表(deleted表)。這兩張是邏輯表也是虛表。有系統(tǒng)在內(nèi)存中創(chuàng)建者兩張表,不會(huì)存儲(chǔ)在數(shù)據(jù)庫(kù)中。而且兩張表的都是只讀的,只能讀取鬧斗數(shù)據(jù)而不能修改數(shù)據(jù)。這兩張表的結(jié)果總是與被改觸發(fā)器應(yīng)用的表的結(jié)構(gòu)相同。當(dāng)觸發(fā)器完成工作后,這兩張表就會(huì)被刪除。Inserted表的數(shù)據(jù)是插入或是修改后的數(shù)據(jù),而deleted表的數(shù)據(jù)是更新前的或是刪除的數(shù)據(jù)。

關(guān)于查詢sql 數(shù)據(jù)庫(kù)中的觸發(fā)器的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。

創(chuàng)新互聯(lián)【028-86922220】值得信賴的成都網(wǎng)站建設(shè)公司。多年持續(xù)為眾多企業(yè)提供成都網(wǎng)站建設(shè),成都品牌建站設(shè)計(jì),成都高端網(wǎng)站制作開(kāi)發(fā),SEO優(yōu)化排名推廣服務(wù),全網(wǎng)營(yíng)銷(xiāo)讓企業(yè)網(wǎng)站產(chǎn)生價(jià)值。


本文題目:如何查詢SQL數(shù)據(jù)庫(kù)中的觸發(fā)器?(查詢sql數(shù)據(jù)庫(kù)中的觸發(fā)器)
分享網(wǎng)址:http://www.dlmjj.cn/article/dpchioe.html