触发器是数据库中的一种特殊对象,用于在表发生特定事件(如插入、更新和删除)时自动执行一组SQL 语句。SQL 触发器语法的基本结构如下:
CREATE TRIGGER [trigger_name]
ON [table_name]
FOR [event_type]
AS
[sql_statements]
[trigger_name]:指定触发器的名称
[table_name]:触发器关联的表名称
[event_type]:触发器将响应的事件类型,如 INSERT、UPDATE 或 DELETE
[sql_statements]:当触发器被激活时要执行的SQL 语句。
INSERT 触发器
INSERT 触发器在向表中插入新行时触发。可以使用 INSERT 触发器来执行以下操作:
维护表之间的引用完整性
计算衍生列或属性
执行审计或日志记录
-- 当向 Customers 表中插入新行时触发
CREATE TRIGGER Insert_Customers
ON Customers
FOR INSERT
AS
-- 更新 Orders 表中的 CustomerCount 字段
UPDATE Orders
SET CustomerCount = CustomerCount + 1
WHERE CustomerID = NEW.CustomerID;
UPDATE 触发器
UPDATE 触发器在现有行在表中更新时触发。可以使用 UPDATE 触发器来执行以下操作:
更新相关表中的相关行
执行业务规则验证
记录更改历史信息
-- 当 Products 表中的 ProductPrice 列更新时触发
CREATE TRIGGER Update_ProductPrice
ON Products
FOR UPDATE OF ProductPrice
AS
IF (NEW.ProductPrice < 0)
BEGIN
RAISE EXCEPTION -- 引发异常以防止负价格
END;
DELETE 触发器
DELETE 触发器在表中的现有行被删除时触发。可以使用 DELETE 触发器来执行以下操作:
级联删除与已删除行关联的行
执行数据清理任务
记录已删除数据的历史信息
-- 当 Orders 表中的行被删除时触发
CREATE TRIGGER Delete_Orders
ON Orders
FOR DELETE
AS
-- 级联删除 OrderItems 表中的相关行
DELETE FROM OrderItems
WHERE OrderID IN (SELECT OrderID FROM DELETED);