技术文摘
如何设置 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 触发器能增强数据库的完整性、一致性以及自动化处理能力,极大提升数据库管理效率。
- MySQL 依赖范围设为 Runtime 后项目发布无驱动程序,怎样正常连接数据库
- 博客点赞系统中 Redis 缓存与 MySQL 数据不一致的逻辑问题解决办法
- DISTINCT 关键字下 MySQL 索引对排序结果有何影响
- Redis缓存点赞数在刷新页面后数据不一致的解决办法
- 利用 Redis 缓存提升博客系统点赞功能性能的方法
- 大数据表中不用开窗函数怎样筛选相邻数据差值超 5 分钟的数据
- 百万条数据按日期条件查询速度慢怎么优化
- MySQL 模糊查询匹配长地址中镇区的方法
- Mybatis Plus 怎样精准匹配纯数组与对象数组
- DISTINCT 查询结果排序顺序的确定方式是怎样的
- MySQL 中如何查找含特定值字段且排除仅含该特定值的记录
- MyBatis Plus 怎样利用 JSON_CONTAINS 精准匹配数据库中的 JSON 数组
- MyBatis Plus 怎样精准匹配 JSON 数据里的纯数组与对象数组
- MySQL 中如何用 find_in_set() 函数精确匹配含特定值的字段
- MySQL 千万级数据模糊搜索如何借助索引表实现优化