卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

數(shù)據(jù)庫(kù)里的觸發(fā)器怎么建(sql圖書管理系統(tǒng)觸發(fā)器如何創(chuàng)建?)

如何實(shí)現(xiàn)數(shù)據(jù)庫(kù)的觸發(fā)器功能?MySQL中的觸發(fā)器由插入、更新和刪除等事件觸發(fā)。如果滿足觸發(fā)器條件,數(shù)據(jù)庫(kù)將執(zhí)行觸發(fā)器中定義的程序語(yǔ)句,觸發(fā)器的執(zhí)行語(yǔ)句可能只有一條或多條。在數(shù)據(jù)庫(kù)世界中找到“觸發(fā)器”,

數(shù)據(jù)庫(kù)里的觸發(fā)器怎么建(sql圖書管理系統(tǒng)觸發(fā)器如何創(chuàng)建?)

如何實(shí)現(xiàn)數(shù)據(jù)庫(kù)的觸發(fā)器功能?

MySQL中的觸發(fā)器由插入、更新和刪除等事件觸發(fā)。如果滿足觸發(fā)器條件,數(shù)據(jù)庫(kù)將執(zhí)行觸發(fā)器中定義的程序語(yǔ)句,觸發(fā)器的執(zhí)行語(yǔ)句可能只有一條或多條。

在數(shù)據(jù)庫(kù)世界中找到“觸發(fā)器”,右鍵“創(chuàng)建觸發(fā)器”,彈出并輸入新的觸發(fā)器名稱,填寫名稱“city_trigger”,執(zhí)行insert語(yǔ)句,結(jié)果成功;然后,查詢t_tri_time數(shù)據(jù)庫(kù)表。

sql圖書管理系統(tǒng)觸發(fā)器如何創(chuàng)建?

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

語(yǔ)法

創(chuàng)建觸發(fā)器trigger_name

在{表格|視圖}上

[帶加密]

{

{ { FOR | AFTER | INSTEAD OF } { [插入] [,] [更新] }

[帶追加]

[不用于復(fù)制]

如同

[ {如果更新(列)

[ {和|或}更新(列)]

[.n ]

| IF(COLUMNS _ UPDATED(){ bitwise _ } UPDATED _ bit mask)

{比較_運(yùn)算符}列_位掩碼[.n ]

} ]

sql_statement [.n ]

}

}

參數(shù)

觸發(fā)器名稱

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

表格|視圖

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

帶加密

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

在.之后

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

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

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

代替

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

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

不能在帶有CHECK選項(xiàng)的可更新視圖上定義INSTEAD OF觸發(fā)器。如果向指定了WITH CHECK選項(xiàng)的可更新視圖添加INSTEAD OF觸發(fā)器,SQL Server將生成錯(cuò)誤。用戶必須使用ALTER VIEW刪除此選項(xiàng),然后才能定義INSTEAD OF觸發(fā)器。

{[刪除] [,] [插入][,][更新] }

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

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

帶附加

指定應(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)參見sp_dbcmptlevel。

WITH APPEND不能與INSTEAD OF trigger一起使用,或者如果顯式聲明了AFTER trigger,則不能使用此子句。只有在為了向后兼容而指定FOR時(shí),才能使用WITH APPEND(沒有INSTEAD OF或AFTER)。未來(lái)版本將不支持WITH APPEND和FOR(將被解釋為AFTER)。

不用于復(fù)制

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

如同

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

sql _語(yǔ)句

是觸發(fā)器的條件和操作。觸發(fā)條件指定其他標(biāo)準(zhǔn)來(lái)確定DELETE、INSERT或UPDATE語(yǔ)句是否會(huì)導(dǎo)致觸發(fā)操作。

當(dāng)嘗試刪除、插入或更新操作時(shí),Transact-SQL語(yǔ)句中指定的觸發(fā)器操作將生效。

觸發(fā)器可以包含任意數(shù)量和種類的Transact-SQL語(yǔ)句。觸發(fā)器被設(shè)計(jì)成根據(jù)數(shù)據(jù)修改語(yǔ)句來(lái)檢查或改變數(shù)據(jù);它不應(yīng)該向用戶返回?cái)?shù)據(jù)。觸發(fā)器中的Transact-SQL語(yǔ)句通常包含控制流語(yǔ)言。CREATE TRIGGER語(yǔ)句中使用了幾個(gè)特殊的表:

刪除和插入的是邏輯(概念)表。這些表在結(jié)構(gòu)上類似于定義觸發(fā)器的表(即嘗試用戶操作的表);這些表用于存儲(chǔ)可能被用戶操作更改的行的舊值或新值。例如,要檢索已刪除表中的所有值,請(qǐng)使用:

選擇*

從已刪除

如果兼容級(jí)別等于70,SQL Server將不允許在delete、insert或UPDATE觸發(fā)器中引用INSERTed和DELETEd表中的text、ntext或image列。插入和刪除的表中的Text、ntext和image值。若要在INSERT或UPDATE觸發(fā)器中檢索新值,請(qǐng)將插入的表與原始更新表聯(lián)接起來(lái)。當(dāng)兼容級(jí)別為65或更低時(shí),在插入或刪除的表中允許空值的text、ntext或image列將返回空值。如果這些列不能為空,則返回零長(zhǎng)度字符串。

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

n

是一個(gè)占位符,指示觸發(fā)器可以包含多個(gè)Transact-SQL語(yǔ)句。對(duì)于IF UPDATE (column)語(yǔ)句,可以通過(guò)重復(fù)UPDATE (column)子句來(lái)包含多個(gè)列。

如果更新(列)

測(cè)試對(duì)指定列的插入或更新操作,該操作不能用于刪除操作??梢灾付ǘ鄠€(gè)列。因?yàn)楸砻窃贠N子句中指定的,所以在IF UPDATE子句中,不要在列名之前包含表名。若要測(cè)試對(duì)多個(gè)列的插入或更新操作,請(qǐng)?jiān)诘谝粋€(gè)操作后指定一個(gè)單獨(dú)的UPDATE(column)子句。IF UPDATE將在插入操作中返回TRUE值,因?yàn)檫@些列插入顯式值或隱式(NULL)值。

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

您可以在觸發(fā)器主體的任何地方使用UPDATE (column)。

圓柱

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

IF (COLUMNS_UPDATED())

測(cè)試所提到的列是否已入或更新,并且僅在插入或更新觸發(fā)器中使用。COLUMNS_UPDATED返回varbinary位模式,指示表中插入或更新了哪些列。

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

您可以在觸發(fā)器主體的任何地方使用COLUMNS_UPDATED。

按位運(yùn)算符

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

updated _位掩碼

表示實(shí)際更新或插入的列的整數(shù)位掩碼。例如,表t1包含C1、C2、C3、C4和C5列。假設(shè)在表t1上有一個(gè)更新觸發(fā)器,為了檢查列C2、C3和C4是否都被更新,指定值14;若要檢查是否只更新了列C2,請(qǐng)將值指定為2。

比較_運(yùn)算符

是一個(gè)比較運(yùn)算符。使用等號(hào)(=)檢查updated_bitmask中指定的所有列是否都已實(shí)際更新。使用大于號(hào)(gt)檢查updated_bitmask中指定的任何或某些列是否已被更新。

列_位掩碼

是要檢查的列的整數(shù)位掩碼,用于檢查這些列是否已被更新或插入。

給…作注解

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

可以使用sp_settriggerorder來(lái)指定表上第一個(gè)和最后一個(gè)執(zhí)行的AFTER觸發(fā)器。對(duì)于表上的每個(gè)插入、更新和刪除操作,只能為第一次執(zhí)行和最后一次執(zhí)行指定一個(gè)AFTER觸發(fā)器。如果在同一個(gè)表上有其他AFTER觸發(fā)器,它們將以隨機(jī)順序執(zhí)行。

如果ALTER TRIGGER語(yǔ)句更改了第一個(gè)或最后一個(gè)觸發(fā)器,則修改后的觸發(fā)器上的第一個(gè)或最后一個(gè)功能集將被刪除,排序值必須用sp_settriggerorder重置。

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

觸發(fā)極限

CREATE TRIGGER必須是批處理中的第一條語(yǔ)句,并且只能應(yīng)用于一個(gè)表。

只能在當(dāng)前數(shù)據(jù)庫(kù)中創(chuàng)建觸發(fā)器,但是觸發(fā)器可以引用當(dāng)前數(shù)據(jù)庫(kù)中的外部對(duì)象。

如果指定觸發(fā)器所有者名稱來(lái)限定觸發(fā)器,則以同樣的方式限定表名。

在同一個(gè)CREATE TRIGGER語(yǔ)句中,可以為多個(gè)用戶操作定義同一個(gè)觸發(fā)器操作,如INSERT和UPDATE。

如果表的外鍵在刪除/更新操作上定義了cascade,則不能在表上定義INSTEAD OF DELETE/UPDATE觸發(fā)器。

可以在觸發(fā)器中指定任何SET語(yǔ)句。所選的SET選項(xiàng)在觸發(fā)器執(zhí)行期間有效,并在觸發(fā)器執(zhí)行后恢復(fù)到以前的設(shè)置。

與存儲(chǔ)過(guò)程一樣,當(dāng)觸發(fā)器觸發(fā)時(shí),應(yīng)用程序被調(diào)用。