首页
学习
活动
专区
圈层
工具
发布

mysql 触发器怎么写

MySQL触发器是一种特殊的存储过程,它会在指定的事件(如INSERT、UPDATE或DELETE)发生时自动执行。触发器可以帮助你实现复杂的业务规则,确保数据的完整性和一致性。

基础概念

触发器由三部分组成:

  1. 触发事件:指定触发器何时被激活,例如INSERT、UPDATE或DELETE。
  2. 触发时间:指定触发器是在事件发生之前(BEFORE)还是之后(AFTER)执行。
  3. 触发操作:指定触发器执行的具体操作,即存储过程的定义。

触发器的类型

  1. BEFORE触发器:在事件发生之前执行。
  2. AFTER触发器:在事件发生之后执行。

触发器的应用场景

  1. 数据验证:在插入或更新数据之前进行验证。
  2. 日志记录:记录数据变更的历史。
  3. 数据同步:在数据变更时自动同步其他表或系统。

触发器的编写示例

假设我们有一个名为employees的表,结构如下:

代码语言:txt
复制
CREATE TABLE employees (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    salary DECIMAL(10, 2)
);

我们希望在每次更新员工薪水时,自动记录变更前后的薪水到另一个表salary_history中。

首先,创建salary_history表:

代码语言:txt
复制
CREATE TABLE salary_history (
    employee_id INT,
    old_salary DECIMAL(10, 2),
    new_salary DECIMAL(10, 2),
    change_date TIMESTAMP
);

然后,编写触发器:

代码语言:txt
复制
DELIMITER $$

CREATE TRIGGER after_salary_update
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
    IF OLD.salary <> NEW.salary THEN
        INSERT INTO salary_history (employee_id, old_salary, new_salary, change_date)
        VALUES (OLD.id, OLD.salary, NEW.salary, NOW());
    END IF;
END$$

DELIMITER ;

解释

  1. DELIMITER $$:将SQL语句的分隔符从默认的分号(;)改为$$,以便在触发器定义中使用分号。
  2. CREATE TRIGGER after_salary_update:创建一个名为after_salary_update的触发器。
  3. AFTER UPDATE ON employees:指定触发器在employees表更新后执行。
  4. FOR EACH ROW:表示对每一行数据都执行触发器。
  5. IF OLD.salary <> NEW.salary:判断薪水是否发生了变化。
  6. INSERT INTO salary_history:将变更前后的薪水记录到salary_history表中。
  7. DELIMITER ;:将SQL语句的分隔符恢复为默认的分号。

参考链接

MySQL触发器文档

通过以上步骤,你可以在MySQL中创建一个触发器,实现数据变更时的自动记录和处理。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的视频

领券