插件窝 干货文章 SQL删除行会触发触发器吗

SQL删除行会触发触发器吗

触发器 DELETE 删除 触发 615    来源:    2025-03-27

SQL删除行是否会触发触发器

是的,在SQL中删除行通常会触发相关的DELETE触发器(如果已定义)。

触发器触发机制

当执行DELETE操作时,SQL数据库会按照以下顺序处理:

  1. 检查约束条件
  2. 执行BEFORE DELETE触发器(如果存在)
  3. 执行实际的删除操作
  4. 执行AFTER DELETE触发器(如果存在)

不同数据库系统的实现

MySQL

-- 创建DELETE触发器示例
CREATE TRIGGER after_employee_delete
AFTER DELETE ON employees
FOR EACH ROW
BEGIN
    INSERT INTO employee_audit 
    VALUES ('DELETE', OLD.id, OLD.name, NOW());
END;

SQL Server

CREATE TRIGGER tr_AfterDelete
ON Employees
AFTER DELETE
AS
BEGIN
    INSERT INTO DeletedEmployeesLog
    SELECT *, GETDATE(), SYSTEM_USER
    FROM deleted;
END

Oracle

CREATE OR REPLACE TRIGGER after_emp_delete
AFTER DELETE ON employees
FOR EACH ROW
BEGIN
    INSERT INTO emp_audit 
    VALUES (:OLD.emp_id, :OLD.emp_name, 'DELETED', SYSDATE);
END;

注意事项

  1. OLD伪表:在DELETE触发器中,可以通过OLD(或:OLD)引用被删除行的值
  2. 事务处理:触发器与删除操作在同一事务中执行
  3. 级联删除:级联删除通常也会触发相关表的DELETE触发器
  4. 性能影响:复杂的触发器逻辑可能显著影响删除操作的性能

如果您需要阻止某些删除操作,可以在BEFORE DELETE触发器中抛出错误或回滚事务。