技术文摘
如何设置 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 触发器能增强数据库的完整性、一致性以及自动化处理能力,极大提升数据库管理效率。
- 三行 Python 代码实现多 Excel 文件合并
- Bug 导致误执行 rm -fr /*,令人瞬间背后发凉!
- Go 中栈内函数的内联处理
- 这些高效代码小技巧令人相见恨晚,你知晓吗?
- 此次,彻底讲清 synchronized 与锁的关系
- 25 种绝佳 VSCode 扩展,尽享便捷高效
- Python 助力实时监控,不再担忧他人动电脑
- JS 图片压缩的实现方法
- Python 线程安全那些事
- 几步轻松让你的 JS 书写更美观
- 9 个 Web 开发人员必备的 CSS 工具
- Go 服务乱码导致的线上事故
- 谈谈分布式系统一致性问题,你了解多少?
- Python 中合并字典的迷人学霸解法
- GitHub 云端 IDE 上线,几秒配置开发环境,VS Code 可于浏览器使用