📅  最后修改于: 2023-12-03 14:52:52.706000             🧑  作者: Mango
触发器(Trigger)是一种特殊的存储过程,它在指定的操作(例如 INSERT、UPDATE 或 DELETE)被执行前或执行后自动地执行。触发器常常被用来实时监控数据库表的变化,对表进行约束和限制。SQL中支持以下几种触发器操作:
在SQL中创建一个触发器可以使用CREATE TRIGGER语法。
下面是一个较为简单的触发器示例,每当employees表中有一项被删除时,将会向audit_log表中插入一条记录来记录被删除的项。
CREATE TRIGGER employee_delete_audit
ON employees
AFTER DELETE
AS
BEGIN
INSERT INTO audit_log (table_name, action_type)
VALUES ('employees', 'delete');
END;
以上代码创建了一个名为employee_delete_audit的触发器,在employees表中对一项或多项数据执行DELETE操作后,将插入一条记录到名为audit_log的表中。
你可以使用WHILE语句来为触发器添加条件。下面是一个示例,当employee表中被删除的员工的部门编号是5时,将会向audit_log表中插入一条记录。
CREATE TRIGGER employee_delete_audit
ON employees
AFTER DELETE
AS
BEGIN
DECLARE @dept_id int
SELECT @dept_id = i.department_id
FROM deleted i;
WHILE @dept_id = 5
BEGIN
INSERT INTO audit_log (table_name, action_type)
VALUES ('employees', 'delete');
BREAK;
END;
END;
在触发器的过程中,你可以访问两个专用的表。这两个表是:
以下是一个示例,每当employee表中增加一名新员工时,将会向audit_log表中插入一条记录,显示该员工的姓名和新增日期。观察以下代码中的inserted表的使用方法。
CREATE TRIGGER employee_audit
ON employees
AFTER INSERT
AS
BEGIN
DECLARE @employee_name varchar(50);
DECLARE @added_date datetime;
SELECT @employee_name = i.first_name + ' ' + i.last_name,
@added_date = i.hire_date
FROM inserted i;
INSERT INTO audit_log (table_name, employee_name, action_type, action_date)
VALUES ('employees', @employee_name, 'insert', @added_date);
END;
以上介绍了SQL中如何创建触发器、如何为触发器设置条件、如何访问专用表。可以根据需要随时灵活运用。同时,在创建触发器时应谨慎,以免因触发器实现不当导致数据库性能下降或数据丢失等问题。