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

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中创建一个触发器,实现数据变更时的自动记录和处理。

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

相关·内容

49秒

测试2/100问:测试用例怎么写?

9分9秒

Java零基础-236-比较规则该怎么写

2分40秒

《Spring Boot + JPA 实战》第12招 动态查询怎么写

1分44秒

94、(补充)部署nacos忘写mysql端口号

1分10秒

《SpringWebFlux7实战》第5招 Annotated Controller怎么写才算Rea

10分14秒

Bright Data 数据集上手体验:不写代码怎么看一份数据产品

2分40秒

面试题:MySQL数据库CPU飙升的话,要怎么处理呢?

1分37秒

MySQL故障治理怎么做?AI运维知识库实现智能问答

31分28秒

尚硅谷-93-查看删除触发器_触发器课后练习

38分13秒

尚硅谷-92-创建触发器

1分24秒

《SpringWebFlux7实战》第10招 Functional Endpoint什么时候值得用

9分52秒

AI时代,Git零基础教程:从Git安装配置到GitHub上传项目、克隆下载项目,一次讲清!

领券