首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 觸發器實戰:維護數據完整性的核心技術

     編輯:關於SqlServer

觸發器核心概念解析

在 SQL Server 資料庫應用中,觸發器是一種特殊的預存程序,它不像一般預存程序透過名稱直接呼叫,而是透過特定事件自動觸發執行。觸發器依附於特定資料表建立,與 INSERT、UPDATE、DELETE 等資料修改操作緊密關聯,可視為資料表的一部分。

SQL Server 主要提供兩大類觸發器:

  • DML 觸發器:針對資料操作語言事件(INSERT、UPDATE、DELETE)觸發,可查詢其他資料表、包含複雜 Transact-SQL 邏輯,常用於強制執行業務規則、擴展約束與完整性檢查。
  • DDL 觸發器:SQL Server 2005 新增功能,針對資料定義語言事件觸發。

本文重點探討 DML 觸發器中的 AFTER 觸發器,其基本語法如下:

CREATE TRIGGER trigger_name
ON table_name
AFTER {INSERT, UPDATE, DELETE}
AS
Sql_statements
[RETURN]

關鍵系統表:inserted 與 deleted

觸發器執行時會用到兩個特殊的記憶體常駐虛擬表:

  • inserted 表:儲存新增或修改後的資料列副本。
  • deleted 表:儲存刪除或修改前的資料列副本。

兩者結構與觸發器所在資料表完全一致,僅存在於觸發器執行期間,是實現資料比對與級聯操作的核心。

嵌套觸發器機制

當一個觸發器的動作引發另一個觸發器,形成鏈式反應,即為嵌套觸發器。SQL Server 支援最多 32 層嵌套,這為跨多張關聯資料表的級聯操作提供了強大支撐。

實戰案例:BBS 論壇多表級聯刪除

業務場景

典型 BBS 論壇包含四張核心資料表,呈現多層一對多關係:

  • BBS_Type(大版塊)→ BBS_LanMu(分論壇)
  • BBS_LanMu → BBS_Topic(主題帖)
  • BBS_Topic → BBS_Reply(回覆)

當管理員刪除一個大版塊時,必須同步清除其下所有分論壇、主題帖、回覆,否則會產生孤立資料,破壞完整性。

嵌套觸發器實現方案

為三張父表分別建立 AFTER DELETE 觸發器,形成嵌套鏈路:

-- 1. 大版塊刪除 → 級聯刪除分論壇
CREATE TRIGGER DelType ON dbo.BBS_Type
AFTER DELETE AS
BEGIN
    DECLARE @typeid INT;
    SELECT @typeid = TypeID FROM deleted;
    DELETE FROM dbo.BBS_LanMu WHERE TypeID = @typeid;
END;

-- 2. 分論壇刪除 → 級聯刪除主題帖
CREATE TRIGGER DelLanmu ON dbo.BBS_LanMu
AFTER DELETE AS
BEGIN
    DECLARE @lmid INT;
    SELECT @lmid = LMID FROM deleted;
    DELETE FROM dbo.BBS_Topic WHERE LMID = @lmid;
END;

-- 3. 主題帖刪除 → 級聯刪除回覆
CREATE TRIGGER DelTopic ON dbo.BBS_Topic
AFTER DELETE AS
BEGIN
    DECLARE @tid INT;
    SELECT @tid = TID FROM deleted;
    DELETE FROM dbo.BBS_Reply WHERE TID = @tid;
END;

執行流程

  1. 刪除 BBS_Type 一筆記錄 → 觸發 DelType
  2. DelType 刪除對應 BBS_LanMu 記錄 → 觸發 DelLanmu
  3. DelLanmu 刪除對應 BBS_Topic 記錄 → 觸發 DelTopic
  4. DelTopic 刪除對應 BBS_Reply 記錄

整個過程在資料庫引擎層自動完成,無需應用層編寫複雜遞迴邏輯,極大簡化業務代碼,確保資料一致性與完整性。

啟用嵌套觸發器前提

需在資料庫屬性中將「遞歸觸發器已啟用」設為 TRUE,否則嵌套鏈路會中斷。

總結

觸發器是維護資料完整性、實現跨表自動化業務邏輯的利器。善用嵌套觸發器可將多層級聯操作封裝於資料庫層,既提升效能,又降低應用層複雜度,是大型關聯式資料庫系統不可或缺的組件。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved