觸發器 是一種特殊類型的資料庫對象,它會自動執行一組預先定義的 SQL 語句以回應表或視圖上的特定事件。觸發器通常用於執行業務規則、維護資料完整性以及自動執行任務,例如記錄變更或更新相關資料。
自動執行:
當指定事件發生時(例如 INSERT、UPDATE、DELETE),觸發器會自動執行。
事件驅動:
觸發器與表級事件綁定,並在觸發關聯事件時呼叫。
資料完整性:
觸發器透過應用規則或檢查來幫助維護資料的一致性和完整性。
審核與記錄:
觸發器可以記錄更改以追蹤誰進行了更新以及進行了哪些更改。
自訂業務邏輯:
觸發器允許直接在資料庫層級實現複雜的邏輯。
DDL 觸發器(資料定義語言觸發器):
響應資料庫模式的變更(例如 CREATE、ALTER、DROP)而觸發。
登入觸發器:
由使用者登入事件觸發,通常用於執行安全性原則。
CREATE TRIGGER TriggerName ON TableName AFTER INSERT, UPDATE, DELETE AS BEGIN -- SQL logic goes here END;
CREATE TRIGGER LogEmployeeChanges ON Employees AFTER INSERT, UPDATE, DELETE AS BEGIN INSERT INTO EmployeeLog (ChangeType, EmployeeID, ChangeDate) SELECT CASE WHEN EXISTS (SELECT * FROM deleted) AND EXISTS (SELECT * FROM inserted) THEN 'UPDATE' WHEN EXISTS (SELECT * FROM deleted) THEN 'DELETE' ELSE 'INSERT' END, ISNULL(d.EmployeeID, i.EmployeeID), GETDATE() FROM inserted i FULL OUTER JOIN deleted d ON i.EmployeeID = d.EmployeeID; END;
CREATE TRIGGER LogChanges ON Orders AFTER UPDATE AS BEGIN INSERT INTO OrderAudit (OrderID, OldStatus, NewStatus, ChangeDate) SELECT d.OrderID, d.Status, i.Status, GETDATE() FROM deleted d JOIN inserted i ON d.OrderID = i.OrderID; END;
CREATE TRIGGER PreventDeletion ON Employees INSTEAD OF DELETE AS BEGIN PRINT 'Deletion of employee records is not allowed.'; END;
CREATE TRIGGER UpdateDependentTables ON Departments AFTER UPDATE AS BEGIN UPDATE Employees SET DepartmentName = i.Name FROM inserted i WHERE Employees.DepartmentID = i.DepartmentID; END;
SQL 觸發器是一個強大的工具,可以自動化流程、執行規則和增強資料庫功能。但是,應明智地使用它們,以平衡其好處與潛在的複雜性和性能影響。
嗨,我是 Abhay Singh Kathayat!
我是一名全端開發人員,擁有前端和後端技術的專業知識。我使用各種程式語言和框架來建立高效、可擴展且用戶友好的應用程式。
請隨時透過我的商務電子郵件與我聯繫:kaashshorts28@gmail.com。
以上是了解 SQL 觸發器:輕鬆自動化資料庫任務的詳細內容。更多資訊請關注PHP中文網其他相關文章!