亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

SQL Server基礎(chǔ)概念--觸發(fā)器 <>

系統(tǒng) 2072 0

觸發(fā)器是一種實(shí)施復(fù)雜的完整性約束的特殊存儲(chǔ)過程。它在 SQL Server 進(jìn)行某個(gè)特定的表修改時(shí)由 SQL Server 自動(dòng)執(zhí)行。觸發(fā)器一般用于加強(qiáng)數(shù)據(jù)庫的某些使用規(guī)則。當(dāng)普通的約束(包括 CHECK 機(jī)制、 DEFAULT 機(jī)制、 RULE 機(jī)制)不足于加強(qiáng)數(shù)據(jù)的完整性時(shí),就可以考慮使用觸發(fā)器。觸發(fā)器對(duì)于那些為不同的商務(wù)軟件提供后臺(tái)數(shù)據(jù)服務(wù)的大型系統(tǒng)特別有用。因?yàn)橛|發(fā)器可以為數(shù)據(jù)庫建立獨(dú)立于具體客戶端軟件的完整性規(guī)則。

?

觸發(fā)器和表是緊密聯(lián)系在一起的,任何觸發(fā)器都是在特定的表上進(jìn)行定義的,該表也稱為觸發(fā)器的觸發(fā)表。由于在觸發(fā)器中可以包含復(fù)雜的處理邏輯,因而在 下列情況 下應(yīng)該 考慮使用觸發(fā)器

(1) ????? 強(qiáng)制比 CHECK 約束復(fù)雜的數(shù)據(jù)完整性。如需要引用其他表數(shù)據(jù)的檢查是無法通過 CHECK 約束完成的,必須使用觸發(fā)器加以實(shí)現(xiàn)。

(2) ????? 使用自定義的錯(cuò)誤信息。通過觸發(fā)器,用戶可以捕獲破壞數(shù)據(jù)完整性的各種操作,并自由地調(diào)用預(yù)先定義的錯(cuò)誤信息或動(dòng)態(tài)地定制錯(cuò)誤信息。約束、規(guī)則和默認(rèn)值只能通過標(biāo)準(zhǔn)的系統(tǒng)錯(cuò)誤信息傳遞錯(cuò)誤信息。如果應(yīng)用程序要求定制的錯(cuò)誤信息和執(zhí)行更加復(fù)雜的錯(cuò)誤處理,那么必須使用觸發(fā)器。

(3) ????? 實(shí)現(xiàn)數(shù)據(jù)庫中多張表的級(jí)聯(lián)修改。

(4) ????? 比較數(shù)據(jù)庫修改前后數(shù)據(jù)的狀態(tài)。大多數(shù)觸發(fā)器都提供了跟蹤 INSERT 、 UPDATE DELETE 語句引起的數(shù)據(jù)變化的能力。因此用戶可以方便地在觸發(fā)器中找出或訪問由于修改而發(fā)生數(shù)據(jù)變化的記錄行。

(5) ????? 維護(hù)非規(guī)范數(shù)據(jù)。用戶可以使用觸發(fā)器來保證非規(guī)范數(shù)據(jù)庫環(huán)境中低級(jí)數(shù)據(jù)的完整性。

?

創(chuàng)建觸發(fā)器的 語法格式 如下:

CREATE TRIGGER trigger_name

ON { table | view }

[ WITH ENCRYPTION ]

{ FOR | AFTER |INSTEAD OF } { [INSERT] [,] [UPDATE] [,] [DELETE] }

AS

????? [{ IF UPDATE (column_name) }]

????? [{ AND | OR } UPDATE (column_name) ]

????? Sql_statement [ n]

其中,部分 參數(shù)含義 如下:

(1) ???? trigger_name :所建立的觸發(fā)器的名稱。觸發(fā)器的命名必須遵循 SQL Server 標(biāo)示符的命名約定,并且在數(shù)據(jù)庫中必須唯一。

(2) ???? table|view: 在其上建立觸發(fā)器的基表或視圖,有時(shí)也稱為觸發(fā)器表或觸發(fā)器視圖。

(3) ???? INSERT,UPDATE DELETE :該關(guān)鍵字指定當(dāng)在表或視圖上執(zhí)行哪些數(shù)據(jù)修改操作時(shí)將激活觸發(fā)器。 SQL Server 允許同一個(gè)觸發(fā)器被一種或多種操作觸發(fā)。

(4) ???? IF UPDATE column_name ):指定當(dāng)對(duì)基表內(nèi)的某字段或某幾個(gè)字段進(jìn)行插入( INSERT )或修改( UPDATE )時(shí),觸發(fā)才起作用。

(5) ???? Sql_statement :觸發(fā)器在被觸發(fā)之后所執(zhí)行的數(shù)據(jù)庫操作。在 SQL Server 中,一個(gè)觸發(fā)器能夠包含任意數(shù)量的 SQL 語句。

?

觸發(fā)器雖然在強(qiáng)制數(shù)據(jù)完整性方面有著十分重要的地位,但是,作為一種 特殊存儲(chǔ)過程 ,它還有以下 幾點(diǎn)約束

(1) ???? 如果在一段批處理命令中使用 CREATE TRIGGER 命令時(shí), CREATE TRIGGER 命令必須是批處理命令的第一條。

(2) ???? 在表中如果既有約束又有觸發(fā)器,則在執(zhí)行時(shí),約束優(yōu)先于觸發(fā)器。而且如果在操作中觸發(fā)器與約束發(fā)生沖突,觸發(fā)器將不執(zhí)行。

(3) ???? 不允許在觸發(fā)器程序中出現(xiàn)下列語句,否則 SQL Server 將拒絕執(zhí)行:

???????????????????? i. ?????? 任何數(shù)據(jù)庫對(duì)象的創(chuàng)建指令。例如: CREATE DATABASE,CREATE TABLE CREATE INDEX

??????????????????? ii. ?????? 任何數(shù)據(jù)庫對(duì)象的刪除指令。如 DROP DATABASE,CREATE TABLE,DROP PROCEDURE

?????????????????? iii. ?????? 所有的對(duì)象修改語句,如 ALTER TABLE ALTER DATABASE.

??????????????????? iv. ?????? TRIMCATE TABLE 命令

???????????????????? v. ?????? SELECT INTO 命令

??????????????????? vi. ?????? 權(quán)限命令( GRANT REVOKE

?????????????????? vii. ?????? UPDATE STATISTICS 語句

????????????????? viii. ?????? SELECT INTO (因?yàn)樵撜Z句創(chuàng)建了一個(gè)表)

??????????????????? ix. ?????? RECONFIGURE 語句

???????????????????? x. ?????? LOAD,RESTORE DATABASE LOG

??????????????????? xi. ?????? 所有的磁盤操作命令

?

(4) ???? 觸發(fā)器不允許創(chuàng)建在特定的表格上,雖然在創(chuàng)建時(shí)不會(huì)提示任何的錯(cuò)誤,但所創(chuàng)建的觸發(fā)器不會(huì)有任何作用。

(5) ???? TRUNCATE 命令不能觸發(fā)可以被 DELETE 操作觸發(fā)的觸發(fā)器。

?

Inserted 表和 deleted 表是觸發(fā)器專用的 臨時(shí)虛擬表 。在 UPDATE 類型的觸發(fā)器中,兩者均有, INSERT 中包含 inserted 表, DELETE 中包含 deleted 表。且他們只能由創(chuàng)建他們的觸發(fā)器引用。觸發(fā)器工作完成后,與該觸發(fā)器相關(guān)的兩個(gè)表也會(huì)被刪除。

?

INSERT 觸發(fā)器和 UPDATE 觸發(fā)器常用語確保用戶某些復(fù)雜的、特殊的商業(yè)規(guī)則,并保證數(shù)據(jù)在插入數(shù)據(jù)表之前是有效的。 DELETE 觸發(fā)器主要有兩個(gè)用途 :首先是防止用戶的錯(cuò)誤的刪除操作;其次是在用戶刪除某個(gè)記錄時(shí),自動(dòng)實(shí)施級(jí)聯(lián)刪除,確保數(shù)據(jù)完整性。

?

如果在某觸發(fā)器的執(zhí)行過程中修改了另一個(gè)表,并觸發(fā)了該表的觸發(fā)器,這種情況稱為 觸發(fā)器嵌套 。使用嵌套觸發(fā)器時(shí),應(yīng)考慮下列因素:

(1) ???? 在默認(rèn)情況下,觸發(fā)器不允許遞歸調(diào)用。也就是說,觸發(fā)器不能自己觸發(fā)自己。

(2) ???? 因?yàn)橐粋€(gè)觸發(fā)器是一個(gè)事務(wù),所以在嵌套觸發(fā)器中,如果任意一點(diǎn)失敗,那么整個(gè)事務(wù)和數(shù)據(jù)的修改將全部回滾(數(shù)據(jù)完整性的一種保護(hù)機(jī)制),如果調(diào)試的話,請(qǐng)?jiān)谄渲刑砑舆m當(dāng)?shù)拇蛴⌒畔ⅰ?

?

查看觸發(fā)器信息 可以使用以下的系統(tǒng)存儲(chǔ)過程:

(1) ???? sp_depends<tablename> :用于查看觸發(fā)器的名稱。

(2) ???? sp_helptigger<tablename> :用于查看觸發(fā)器的類型和擁有者等初步的信息。

(3) ???? sp_helptext<triggername> :用于查看觸發(fā)器的定義文本。

?

SQL 企業(yè)管理器中,不能直接刪除觸發(fā)器,因此, 刪除觸發(fā)器 只能使用 T-SQL 中的 DROP TRIGGER 語句

?

ref: http://blog.csdn.net/guilin_gavin/archive/2009/01/09/3742065.aspx ?

ref: http://database.51cto.com/art/200904/118363.htm ?

SQL Server基礎(chǔ)概念--觸發(fā)器 <>


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦?。?!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 日本一区二区三区四区在线观看 | 日韩一区二区三区在线 | 久久精品一区二区 | 伊人五月天婷婷琪琪综合 | 色老头久久久久久久久久 | 欧美一级毛片在线一看 | 国产在线精品一区免费香蕉 | 亚洲欧美日韩高清专区一区 | 伊人中文字幕在线 | 精品一区二区三区在线视频 | 国产不卡在线观看 | 国产乱人伦偷精品视频不卡 | 欧美国产一区二区二区 | 亚洲国产欧洲精品路线久久 | 香蕉视频网站在线播放 | 中文字幕一区二区视频 | 欧美一区二区在线 | 欧洲午夜视频 | 国产福利一区二区精品视频 | 九九热视频这里只有精品 | 在线观看视频91 | 蕾丝视频永久在线入口香蕉 | 四虎影视永久费观看在线 | 99精品国产三级在线观看 | 五月天激情视频在线观看 | 国产精品一区二区在线播放 | 久久月| 亚洲日韩精品欧美一区二区一 | 好吊妞精品视频 | 成人在线第一页 | 尤物精品国产福利网站 | 久热99这里只有精品视频6 | 97色在线观看 | 国产91久久久久久久免费 | 亚洲欧美国产高清va在线播放 | 国产a毛片清高视频 | 国产区成人精品视频 | 欧美午夜精品一区二区三区 | 一级毛片老太婆交性欧美 | 狠狠狠色丁香婷婷综合久久五月 | 免费在线观看毛片 |