MySQL8 存储触发器

MySQL8 存储触发器,MySQL8教程,介绍 MySQL8 存储触发器和示例。

【全栈教程】:https://try8.cn/article
教程目录:
教程内容:
最近更新:2023-04-17

一、MySQL8 存储触发器介绍

MySQL8 存储触发器是一种存储对象类型,它是与表关联的数据库对象,当表发生特定的事件时自动激活,主要用途是监测表在添加、更新和删除前后的动作,在其期间进行数据记录操作或处理计算逻辑。


1.1、存储触发器特性

MySQL5.7.2 版本之前,每个表最多可定义 6 个存储触发器,MySQL8 没有限制:

  • 存储触发器只能用于表,不会直接被外键或视图激活;
  • 基于行复制,副本触发器不会被激活,基于语句复制,会激活副本触发器;
  • 存储触发器不允许使用 return,立即退出请使用 leave 语句;
  • 存储触发器不允许放在系统表上,如:information_schema 和 performance_schema;
  • 存储触发器不会检测底层对象元数据何时发生更改。


1.2、存储触发器激活

在 MYSQL8 中,触发器就是一组 SQL 语句,但对表中的数据进行更改时,会自动调用该语句,存储触发器可以被定义在 insert、update、delete 语句中。

  • before insert:在数据插入表之前激活触发器;
  • after insert:在数据插入表之后激活触发器;
  • before update:在表中的数据更新之前激活触发器;
  • after update:在表中的数据更新之后激活触发器;
  • before delete:在表中删除数据之前激活触发器;
  • after delete:在表中删除数据之后激活触发器。


二、MySQL8 存储触发器教程

2.1、创建存储触发器

首先,我们通过编写一个简单的存储触发器,来介绍存储触发器的语法。

# 创建测试表
create table `try8_dev` (`try8_id` int, `try8_name` varchar(200));
insert into `try8_dev`(try8_id) value(1);

# 编写触发器
delimiter //
create trigger try8_trig before update on try8_dev
for each row
begin
    if new.try8_id < 0 then 
        set new.try8_name = '小于 0';
    elseif new.try8_id > 10 then 
        set new.try8_name = '大于 10';
    end if;
end //
delimiter ;

# 测试效果
update `try8_dev` set try8_id = 11;
select * from `try8_dev`;


编写存储触发器关键字说明:

  • delimiter:将默认分隔符分号 ; 更改为其它符号,本例修改为 //,更改原因是为了将存储触发器作为一个整体传递给服务器,而不是根据分隔符一句一句的执行,需要在存储触发器最后一行还原为默认分隔符;
  • create trigger:用于创建存储触发器,该关键字后面指定名称;
  • before update on:激活时间,详见 1.2 小节说明;
  • for each row:触发规则应用到全部行;
  • beginend:声明存储触发器的主体,您可以将 SQL 放在正文中以处理业务逻辑。


2.2、查看存储触发器

# 根据存储触发器名称查询
show triggers from try8 where `trigger` = 'try8_trig';
# 根据表名称查询
show triggers from try8 where `table` = 'try8_dev';
# 使用系统表根据存储触发器名称查询
select * from information_schema.triggers where trigger_name = 'try8_trig';
# 使用系统表根据表名称查询
select * from information_schema.triggers where event_object_table = 'try8_dev';


2.3、删除存储触发器

您可以通过删除表来自动删除对应的触发器,也可以手动删除,手动需要指定前缀数据库名称。

# 前缀 try8 是数据库名称,而非表名称
drop trigger try8.try8_trig;


2.4、修改存储触发器

MySQL8 存储触发器不支持修改,官方推荐的实现方式为先删除后重建。


三、MySQL8 存储触发器 总结

MySQL8教程 - MySQL8 存储触发器,介绍 MySQL 和 MySQL8 数据库,从 MySQL8 存储触发器概念开始,逐步到 MySQL8 存储触发器示例等,通篇实用易懂,让 MySQL8 入门更加快速和简单。


《MySQL8教程》主打原创、全部免费,欢迎学习和转载,如需交流请加微信号:try8_cn。