日本xxxx18视频在线观看-日本xxxx1819-日本xxxwww在线观看-日本xxx-日本xx-日本www在线视频

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

[點晴永久免費OA]SQL Server觸發(fā)器介紹

admin
2020年11月13日 12:16 本文熱度 4051
  觸發(fā)器(trigger)是一個特殊的存儲過程,它的執(zhí)行不是由程序調(diào)用,也不是手工啟動,而是由個事件來觸發(fā),比如當(dāng)對一個表進(jìn)行操作( insert,delete, update)時就會激活它執(zhí)行。觸發(fā)器經(jīng)常用于加強數(shù)據(jù)的完整性約束和業(yè)務(wù)規(guī)則等。觸發(fā)器可以從 DBA_TRIGGERS ,USER_TRIGGERS 數(shù)據(jù)字典中查到。
  觸發(fā)器可以查詢其他表,而且可以包含復(fù)雜的 SQL 語句。它們主要用于強制服從復(fù)雜的業(yè)務(wù)規(guī)則或要求。例如:您可以根據(jù)客戶當(dāng)前的帳戶狀態(tài),控制是否允許插入新訂單。
  觸發(fā)器也可用于強制引用完整性,以便在多個表中添加、更新或刪除行時,保留在這些表之間所定義的關(guān)系。然而,強制引用完整性的最好方法是在相關(guān)表中定義主鍵和外鍵約束。如果使用數(shù)據(jù)庫關(guān)系圖,則可以在表之間創(chuàng)建關(guān)系以自動創(chuàng)建外鍵約束。

  創(chuàng)建觸發(fā)器的SQL語法
  DELIMITER |
  CREATE TRIGGER `<databaseName>`.`<triggerName>`
  < [ BEFORE | AFTER ] > < [ INSERT | UPDATE | DELETE ] >
  ON <tableName>
  FOR EACH ROW
  BEGIN
  --do something
  END |

  觸發(fā)器的優(yōu)點
  觸發(fā)器可通過數(shù)據(jù)庫中的相關(guān)表實現(xiàn)級聯(lián)更改;不過,通過級聯(lián)引用完整性約束可以更有效地執(zhí)行這些更改。觸發(fā)器可以強制比用 CHECK 約束定義的約束更為復(fù)雜的約束。與 CHECK 約束不同,觸發(fā)器可以引用其它表中的列。例如,觸發(fā)器可以使用另一個表中的 SELECT 比較插入或更新的數(shù)據(jù),以及執(zhí)行其它操作,如修改數(shù)據(jù)或顯示用戶定義錯誤信息。觸發(fā)器也可以評估數(shù)據(jù)修改前后的表狀態(tài),并根據(jù)其差異采取對策。一個表中的多個同類觸發(fā)器(INSERT、UPDATE 或 DELETE)允許采取多個不同的對策以響應(yīng)同一個修改語句。

  比較觸發(fā)器與約束
  約束和觸發(fā)器在特殊情況下各有優(yōu)勢。觸發(fā)器的主要好處在于它們可以包含使用 Transact-SQL 代碼的復(fù)雜處理邏輯。因此,觸發(fā)器可以支持約束的所有功能;但它在所給出的功能上并不總是最好的方法。實體完整性總應(yīng)在最低級別上通過索引進(jìn)行強制,這些索引或是 PRIMARY KEY 和 UNIQUE 約束的一部分,或是在約束之外獨立創(chuàng)建的。假設(shè)功能可以滿足應(yīng)用程序的功能需求,域完整性應(yīng)通過 CHECK 約束進(jìn)行強制,而引用完整性 (RI) 則應(yīng)通過 FOREIGN KEY 約束進(jìn)行強制。在約束所支持的功能無法滿足應(yīng)用程序的功能要求時,觸發(fā)器就極為有用。
  例如:除非 REFERENCES 子句定義了級聯(lián)引用操作,否則 FOREIGN KEY 約束只能以與另一列中的值完全匹配的值來驗證列值。
  CHECK 約束只能根據(jù)邏輯表達(dá)式或同一表中的另一列來驗證列值。如果應(yīng)用程序要求根據(jù)另一個表中的列驗證列值,則必須使用觸發(fā)器。
  約束只能通過標(biāo)準(zhǔn)的系統(tǒng)錯誤信息傳遞錯誤信息。如果應(yīng)用程序要求使用(或能從中獲益)自定義信息和較為復(fù)雜的錯誤處理,則必須使用觸發(fā)器。
  觸發(fā)器可通過數(shù)據(jù)庫中的相關(guān)表實現(xiàn)級聯(lián)更改;不過,通過級聯(lián)引用完整性約束可以更有效地執(zhí)行這些更改。
  觸發(fā)器可以禁止或回滾違反引用完整性的更改,從而取消所嘗試的數(shù)據(jù)修改。當(dāng)更改外鍵且新值與主鍵不匹配時,此類觸發(fā)器就可能發(fā)生作用。例如,可以在 titleauthor.title_id 上創(chuàng)建一個插入觸發(fā)器,使它在新值與 titles.title_id 中的某個值不匹配時回滾一個插入。不過,通常使用 FOREIGN KEY 來達(dá)到這個目的。
  如果觸發(fā)器表上存在約束,則在 INSTEAD OF 觸發(fā)器執(zhí)行后但在 AFTER 觸發(fā)器執(zhí)行前檢查這些約束。如果約束破壞,則回滾 INSTEAD OF 觸發(fā)器操作并且不執(zhí)行 AFTER 觸發(fā)器。
  觸發(fā)器到底可不可以在視圖上創(chuàng)建 在 SQL Server™ 聯(lián)機叢書中,是沒有說觸發(fā)器不能在視圖上創(chuàng)建的, 并且在語法解釋中表明:
  在 CREATE TRIGGER 的 ON 之后可以是視圖。 然而,事實似乎并不是如此,很多專家也說觸發(fā)器不能在視圖上創(chuàng)建。我也專門作了測試,的確如此,不管是普通視圖還是索引視圖,都無法在上面創(chuàng)建觸發(fā)器,真的是這樣嗎?請點擊詳細(xì),但是無可厚非的是:當(dāng)在臨時表或系統(tǒng)表上創(chuàng)建觸發(fā)器時會遭到拒絕。 深刻理解 FOR CREATE TRIGGER 語句的 FOR 關(guān)鍵字之后可以跟 INSERT、UPDATE、DELETE 中的一個或多個,也就是說在其它情況下是不會觸發(fā)觸發(fā)器的, 包括 SELECT、TRUNCATE、WRITETEXT、UPDATETEXT。相關(guān)內(nèi)容 一個有趣的應(yīng)用我們看到許多注冊系統(tǒng)在注冊后都不能更改用戶名,但這多半是由應(yīng)用程序決定的, 如果直接打開數(shù)據(jù)庫表進(jìn)行更改,同樣可以更改其用戶名, 在觸發(fā)器中利用回滾就可以巧妙地實現(xiàn)無法更改用戶名……詳細(xì)內(nèi)容 觸發(fā)器內(nèi)部語句出錯時…… 這種情況下,前面對數(shù)據(jù)更改操作將會無效。舉個例子,在表中插入數(shù)據(jù)時觸發(fā)觸發(fā)器,而觸發(fā)器內(nèi)部此時發(fā)生了運行時錯誤,那么將返回一個錯誤值,并且拒絕剛才的數(shù)據(jù)插入。不能在觸發(fā)器中使用的語句 觸發(fā)器中可以使用大多數(shù) T-SQL 語句,但如下一些語句是不能在觸發(fā)器中使用的。
  CREATE 語句,如:CREATE DATABASE、CREATE TABLE、CREATE INDEX 等。
  ALTER 語句,如:ALTER DATABASE、ALTER TABLE、ALTER INDEX 等。
  DROP 語句,如:DROP DATABASE、DROP TABLE、DROP INDEX 等。
  DISK 語句,如:DISK INIT、DISK RESIZE。
  LOAD 語句,如:LOAD DATABASE、LOAD LOG。
  RESTORE 語句,如:RESTORE DATABASE、RESTORE LOG。
  RECONFIGURE
  TRUNCATE TABLE 語句在sybase的觸發(fā)器中不可使用!

  慎用觸發(fā)器 觸發(fā)器功能強大,輕松可靠地實現(xiàn)許多復(fù)雜的功能,為什么又要慎用呢。觸發(fā)器本身沒有過錯,但由于我們的濫用會造成數(shù)據(jù)庫及應(yīng)用程序的維護(hù)困難。在數(shù)據(jù)庫操作中,我們可以通過關(guān)系、觸發(fā)器、存儲過程、應(yīng)用程序等來實現(xiàn)數(shù)據(jù)操作…… 同時規(guī)則、約束、缺省值也是保證數(shù)據(jù)完整性的重要保障。如果我們對觸發(fā)器過分的依賴,勢必影響數(shù)據(jù)庫的結(jié)構(gòu),同時增加了維護(hù)的復(fù)雜程序。

該文章在 2020/11/13 12:16:28 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調(diào)度、堆場、車隊、財務(wù)費用、相關(guān)報表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點,圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務(wù)都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 国产精品自在线拍国产手机版 | 国产亚洲成?v人在线观看导航 | 3对夫妇换着玩互换6 | 国产午夜福利精品一区 | 日韩在线观看精品第一页 | 日韩无专在线免费 | 免费观看国产日本一区二区 | 成年免费大片黄在线观看欲女 | 欧美交换配乱吟粗大免费看 | 国产高清免费a级在线观看 日韩第一页 | 国内精品自国内精品自线电影 | 国产精品偷伦视频免费观看 | 欧美视频在线不卡 | 国产日产高清欧美一区等 | 国产精品2025在线 | 8x8×拨牐拨牐 | 日本一卡精品视频免费 | 久青草视 | 国产午夜亚洲精品国产 | 国产十欧美| 欧美国产日本韩在线 | 国内精品视频一区电影 | 欧美日本片一区二区 | 91色色| 成全在线观看免费观看高清 | 日韩系列第一页 | 国产日韩欧美另类重口 | 国产亚洲精品自在线观看 | 国产在线播放不卡免费 | 成人伊人亚洲人综合网站 | 日本不卡视频 | 精品九九热在线免费视频 | 日韩视频中文字幕在线观看 | 老司机午夜视频 | 国产黑色 | 成人伦理在线观看国产 | 欧美激情在线 | 另类小说亚洲欧洲自拍拍偷 | 国产美女自卫 | 免费国语高清电影电视剧动 | 日韩a级片|