技术文摘
如何设置 SQL 触发器
如何设置 SQL 触发器
在数据库管理中,SQL 触发器是一种强大的工具,它能在特定的数据库事件发生时自动执行预定义的操作。以下将详细介绍如何设置 SQL 触发器。
首先要明确,触发器主要分为 DML 触发器(针对数据操作语言事件,如 INSERT、UPDATE、DELETE)和 DDL 触发器(针对数据定义语言事件,如 CREATE、ALTER、DROP)。这里先以常见的 DML 触发器为例。
创建一个基本的 INSERT 触发器,当向某张表插入新数据时触发特定操作。例如有一张“employees”表,要在每次插入新员工记录时记录插入时间。代码如下:
CREATE TRIGGER trg_insert_employee
AFTER INSERT ON employees
FOR EACH ROW
BEGIN
INSERT INTO employee_insert_log (employee_id, insert_time)
VALUES (NEW.employee_id, NOW());
END;
这里,“trg_insert_employee”是触发器名称;“AFTER INSERT ON employees”表示在向“employees”表插入数据后触发;“FOR EACH ROW”表明对每一行受影响的数据执行触发操作;“BEGIN”和“END”之间是触发后要执行的具体 SQL 语句,这里是向“employee_insert_log”表插入新员工的 ID 和插入时间。
UPDATE 触发器用于在数据更新时执行操作。假设要在更新“employees”表中员工工资时,记录旧工资和新工资。代码如下:
CREATE TRIGGER trg_update_salary
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
INSERT INTO salary_update_log (employee_id, old_salary, new_salary)
VALUES (NEW.employee_id, OLD.salary, NEW.salary);
END;
其中,“OLD”关键字表示更新前的数据,“NEW”表示更新后的数据。
DELETE 触发器在删除数据时触发。比如删除“employees”表中员工记录时,将被删除记录转移到“employees_deleted”表。代码如下:
CREATE TRIGGER trg_delete_employee
BEFORE DELETE ON employees
FOR EACH ROW
BEGIN
INSERT INTO employees_deleted (employee_id, name, salary)
VALUES (OLD.employee_id, OLD.name, OLD.salary);
END;
这里使用“BEFORE DELETE”,表示在删除操作执行前触发,以便先保存要删除的数据。
对于 DDL 触发器,语法结构类似,但事件不同。例如创建一个在创建新表时记录操作的触发器:
CREATE TRIGGER trg_ddl_create_table
ON DATABASE
FOR CREATE_TABLE
AS
BEGIN
INSERT INTO ddl_operations_log (operation_type, operation_time)
VALUES ('CREATE_TABLE', GETDATE());
END;
合理设置 SQL 触发器能增强数据库的完整性、一致性以及自动化处理能力,极大提升数据库管理效率。