日韩小视频-日韩久久一区二区三区-日韩久久一级毛片-日韩久久久精品中文字幕-国产精品亚洲精品影院-国产精品亚洲欧美云霸高清

下載吧 - 綠色安全的游戲和軟件下載中心

軟件下載吧

當(dāng)前位置:軟件下載吧 > 數(shù)據(jù)庫(kù) > MS_SQL > SQL開(kāi)發(fā)知識(shí):關(guān)于SQL Server數(shù)據(jù)庫(kù)觸發(fā)器詳解

SQL開(kāi)發(fā)知識(shí):關(guān)于SQL Server數(shù)據(jù)庫(kù)觸發(fā)器詳解

時(shí)間:2024-02-05 12:47作者:下載吧人氣:53

前言

SQL Server觸發(fā)器在非常有爭(zhēng)議的主題。它們能以較低的成本提供便利,但經(jīng)常被開(kāi)發(fā)人員、DBA誤用,導(dǎo)致性能瓶頸或維護(hù)性挑戰(zhàn)。

本文簡(jiǎn)要回顧了觸發(fā)器,并深入討論了如何有效地使用觸發(fā)器,以及何時(shí)觸發(fā)器會(huì)使開(kāi)發(fā)人員陷入難以逃脫的困境。

雖然本文中的所有演示都是在SQL Server中進(jìn)行的,但這里提供的建議是大多數(shù)數(shù)據(jù)庫(kù)通用的。觸發(fā)器帶來(lái)的挑戰(zhàn)在MySQL、PostgreSQL、MongoDB和許多其他應(yīng)用中也可以看到。

什么是觸發(fā)器

可以在數(shù)據(jù)庫(kù)或表上定義SQL Server觸發(fā)器,它允許代碼在發(fā)生特定操作時(shí)自動(dòng)執(zhí)行。本文主要關(guān)注表上的DML觸發(fā)器,因?yàn)樗鼈兺贿^(guò)度使用。相反,數(shù)據(jù)庫(kù)的DDL觸發(fā)器通常更集中,對(duì)性能的危害更小。

觸發(fā)器是對(duì)表中數(shù)據(jù)更改時(shí)進(jìn)行計(jì)算的一組代碼。觸發(fā)器可以定義為在插入、更新、刪除或這些操作的任何組合上執(zhí)行。MERGE操作可以觸發(fā)語(yǔ)句中每個(gè)操作的觸發(fā)器。

觸發(fā)器可以定義為INSTEAD OF或AFTER。AFTER觸發(fā)器發(fā)生在數(shù)據(jù)寫(xiě)入表之后,是一組獨(dú)立的操作,和寫(xiě)入表的操作在同一事務(wù)執(zhí)行,但在寫(xiě)入發(fā)生之后執(zhí)行。如果觸發(fā)器失敗,原始操作也會(huì)失敗。INSTEAD OF觸發(fā)器替換調(diào)用的寫(xiě)操作。插入、更新或刪除操作永遠(yuǎn)不會(huì)發(fā)生,而是執(zhí)行觸發(fā)器的內(nèi)容。

觸發(fā)器允許在發(fā)生寫(xiě)操作時(shí)執(zhí)行TSQL,而不管這些寫(xiě)操作的來(lái)源是什么。它們通常用于在希望確保執(zhí)行寫(xiě)操作時(shí)運(yùn)行關(guān)鍵操作,如日志記錄、驗(yàn)證或其他DML。這很方便,寫(xiě)操作可以來(lái)自API、應(yīng)用程序代碼、發(fā)布腳本,或者內(nèi)部流程,觸發(fā)器無(wú)論如何都會(huì)觸發(fā)。

觸發(fā)器是什么樣的

用WideWorldImporters示例數(shù)據(jù)庫(kù)中的Sales.Orders 表舉例,假設(shè)需要記錄該表上的所有更新或刪除操作,以及有關(guān)更改發(fā)生的一些細(xì)節(jié)。這個(gè)操作可以通過(guò)修改代碼來(lái)完成,但是這樣做需要對(duì)表的代碼寫(xiě)入中的每個(gè)位置進(jìn)行更改。通過(guò)觸發(fā)器解決這一問(wèn)題,可以采取以下步驟:

1. 創(chuàng)建一個(gè)日志表來(lái)接受寫(xiě)入的數(shù)據(jù)。下面的TSQL創(chuàng)建了一個(gè)簡(jiǎn)單日志表,以及一些添加的數(shù)據(jù)點(diǎn):

CREATE TABLE Sales.Orders_log
( Orders_log_ID int NOT NULL IDENTITY(1,1)
CONSTRAINT PK_Sales_Orders_log PRIMARY KEY CLUSTERED,
OrderID int NOT NULL,
CustomerID_Old int NOT NULL,
CustomerID_New int NOT NULL,
SalespersonPersonID_Old int NOT NULL,
SalespersonPersonID_New int NOT NULL,
PickedByPersonID_Old int NULL,
PickedByPersonID_New int NULL,
ContactPersonID_Old int NOT NULL,
ContactPersonID_New int NOT NULL,
BackorderOrderID_Old int NULL,
BackorderOrderID_New int NULL,
OrderDate_Old date NOT NULL,
OrderDate_New date NOT NULL,
ExpectedDeliveryDate_Old date NOT NULL,
ExpectedDeliveryDate_New date NOT NULL,
CustomerPurchaseOrderNumber_Old nvarchar(20) NULL,
CustomerPurchaseOrderNumber_New nvarchar(20) NULL,
IsUndersupplyBackordered_Old bit NOT NULL,
IsUndersupplyBackordered_New bit NOT NULL,
Comments_Old nvarchar(max) NULL,
Comments_New nvarchar(max) NULL,
DeliveryInstructions_Old nvarchar(max) NULL,
DeliveryInstructions_New nvarchar(max) NULL,
InternalComments_Old nvarchar(max) NULL,
InternalComments_New nvarchar(max) NULL,
PickingCompletedWhen_Old datetime2(7) NULL,
PickingCompletedWhen_New datetime2(7) NULL,
LastEditedBy_Old int NOT NULL,
LastEditedBy_New int NOT NULL,
LastEditedWhen_Old datetime2(7) NOT NULL,
LastEditedWhen_New datetime2(7) NOT NULL,
ActionType VARCHAR(6) NOT NULL,
ActionTime DATETIME2(3) NOT NULL,
UserName VARCHAR(128) NULL);

標(biāo)簽MSSQL,SQLServer,技術(shù)文檔,數(shù)據(jù)庫(kù),SQLSERVER

相關(guān)下載

查看所有評(píng)論+

網(wǎng)友評(píng)論

網(wǎng)友
您的評(píng)論需要經(jīng)過(guò)審核才能顯示

熱門(mén)閱覽

最新排行

公眾號(hào)

主站蜘蛛池模板: 免费一级欧美性大片 | 午夜影院a | 久久影院一区二区三区 | 精品动漫一区二区 | 精品久久久久久中文字幕网 | 高清免费国产在线观看 | 国产午夜精品一区二区 | 久久精品a亚洲国产v高清不卡 | 国产一级毛片在线 | 欧美日韩永久久一区二区三区 | 国产第三区 | 国产精品黄页网站在线播放免费 | 国产成人高清亚洲一区久久 | 国产手机精品a | 国产三级视频在线播放 | 2021国产精品自在拍在线播放 | 欧美日韩a∨毛片一区 | 日本视频播放免费线上观看 | 日本一区二区三区高清在线观看 | 九草在线播放 | 美女视频网站免费播放视 | 国产精品1区2区3区 国产精品1区2区3区在线播放 | 99精品免费 | 色综合色狠狠天天久久婷婷基地 | 欧美一区二区三区在线播放 | 高清午夜看片a福利在线观看琪琪 | 岛国在线永久免费视频 | 精品真实国产乱文在线 | 色女生影院 | 国产精品国产三级在线高清观看 | 国产国产人免费人成成免视频 | 国产香蕉在线视频一级毛片 | 九九精品在线视频 | 精品国产免费人成在线观看 | 亚洲伦理天堂 | 一区二区三区在线观看免费 | 天码毛片一区二区三区入口 | 亚洲综合片 | 欧美一级永久免费毛片在线 | 在线视频一区二区三区四区 | 亚洲永久中文字幕在线 |