技术文摘
如何设置 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 触发器能增强数据库的完整性、一致性以及自动化处理能力,极大提升数据库管理效率。
- 2024 年平台工程现状:尚在起步阶段
- Xxl-Job 执行器的自动注册如何实现?
- Tomcat 与 Jetty 的高性能高并发之路
- 26 个 JavaScript 代码简洁优雅编写技巧
- 稳定性上线的三板斧(支持灰度、验证、回滚)
- Netty 实现单机百万并发的秘诀
- 多年 Go 编程经验下的八个性能优化技巧总结
- 探究“幽灵杀手” pnpm 如何做到“又快又省又稳”的实现原理
- 彻底搞懂 TCP、HTTP、Socket 与 Socket 连接池
- 面试官:零拷贝技术的实现原理如何阐述?
- JVM 性能优化实战指引
- 面试官:RocketMQ 基本架构、消息模式、可靠传输及事务消息原理详解
- MyBatis 内置连接池原理深度剖析
- 五分钟明晰 Golang 数据库连接管理
- 优化 YOLO 模型:借助 Albumentations 实现高级数据增强