文章目录
前言
在 MySQL 中,触发器(Trigger)和存储过程(Stored Procedure)都是重要的数据库编程工具,它们都用于执行自动化的数据库操作,但它们的用途和触发时机有所不同
一、触发器(Trigger)
1.介绍
MySQL 触发器(Trigger)是一种特殊的存储过程,它在对某个表执行 INSERT、UPDATE 或 DELETE 操作时自动触发并执行。触发器的作用通常是用于数据的验证、审计、日志记录、或自动更新等
2.语法及参数解释
CREATE TRIGGER trigger_name
{ BEFORE | AFTER }
{ INSERT | UPDATE | DELETE }
ON table_name
FOR EACH ROW
trigger_body;
- trigger_name:触发器的名称
- BEFORE 或 AFTER:定义触发器执行的时机,BEFORE 表示在触发的 SQL 语句执行之前,AFTER 表示在触发的 SQL 语句执行之后
- INSERT、UPDATE、DELETE:定义触发器响应的事件类型
- table_name:触发器关联的表
- FOR EACH ROW:指示触发器针对每一行进行操作
- trigger_body:触发器执行的实际 SQL 语句,类似于存储过程的代码
3.触发器示例
1.先创建员工信息employees 表,日志记录audit_log表
CREATE TABLE employees (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
salary DECIMAL(10, 2)
);
CREATE TABLE audit_log (
id INT AUTO_INCREMENT PRIMARY KEY,
action VARCHAR(50),
table_name VARCHAR(50),
record_id INT,
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
2.创建insert触发器
CREATE TRIGGER after_employee_insert # 触发器的名称
AFTER INSERT ON employees # 当 employees 表插入新记录时触发此触发器
FOR EACH ROW # 对每一行进行操作
BEGIN
# SQL 语句
INSERT INTO audit_log (action, table_name, record_id)
VALUES ('INSERT', 'employees', NEW.id); # NEW.id 表示插入的数据行的 id 值
END;
3.在employees 表写入一条数据
INSERT INTO employees(