是的,在SQL中删除行通常会触发相关的DELETE触发器(如果已定义)。
当执行DELETE操作时,SQL数据库会按照以下顺序处理:
-- 创建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;
CREATE TRIGGER tr_AfterDelete
ON Employees
AFTER DELETE
AS
BEGIN
INSERT INTO DeletedEmployeesLog
SELECT *, GETDATE(), SYSTEM_USER
FROM deleted;
END
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;
如果您需要阻止某些删除操作,可以在BEFORE DELETE触发器中抛出错误或回滚事务。