大家好,我是Java1234_小锋老师,最近更新 《一天学会 Mysql8 视频教程(无废话版) 》专辑,感谢大家支持。

本课程主要介绍和讲解 Mysql8简介,安装以及配置,客户端sqlyog 安装以及配置,数据库 基本操作,数据库表基本操作,查询数据,添加,修改,删除数据,索引,视图,触发器 ,常用函数,存储 过程和函数。
视频教程+课件+源码 打包下载 :
链接:https://pan.baidu.com/s/1o-zRfndo1HHrS_uFroOiCw?pwd=1234
提取码:1234
Mysql8(在第一阶段目录里)
Mysql8 触发器
1,触发器的引入
触发器(TRIGGER) 是由事件来触发某个操作。这些事件包括 INSERT 语句、UPDATE 语句和 DELETE 语句。当数据库系统执行这些事件时,就会激活触发器执行相应的操作。
在 MySQL 8 中,触发器可以帮助开发者实现复杂的业务逻辑、数据校验、日志记录以及级联操作,而无需在应用层编写额外的代码。
2,前置数据准备
为了更好地演示触发器的使用,我们首先创建图书类别表 t_bookType 和图书表 t_book(包含外键关联)。
sql
-- 创建图书类别表 t_bookType
CREATE TABLE t_bookType(
id INT PRIMARY KEY AUTO_INCREMENT,
bookTypeName VARCHAR(20),
bookTypeDesc VARCHAR(200)
);
-- 创建图书表 t_book (包含外键关联)
CREATE TABLE t_book(
id INT PRIMARY KEY AUTO_INCREMENT,
bookName VARCHAR(20),
author VARCHAR(10),
price DECIMAL(6,2),
bookTypeId INT,
CONSTRAINT `fk` FOREIGN KEY (`bookTypeId`) REFERENCES `t_bookType` (`id`)
);
3,创建与使用触发器
在 MySQL 中,创建触发器需要指定触发时机(BEFORE 或 AFTER)、触发事件(INSERT、UPDATE 或 DELETE)以及作用的表。
3.1 创建只有一个执行语句的触发器
基本语法:
sql
CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件
ON 表名 FOR EACH ROW 执行语句
实际案例:
在向 t_book 表插入数据之前,如果图书价格(price)为空,则自动将其设置为 0。
sql
CREATE TRIGGER tr_book_price_default
BEFORE INSERT ON t_book
FOR EACH ROW
SET NEW.price = IFNULL(NEW.price, 0);
注:NEW 关键字用于表示即将插入或更新的新数据行。
3.2 创建有多个执行语句的触发器
基本语法:
sql
CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件
ON 表名 FOR EACH ROW
BEGIN
执行语句列表
END
实际案例:
在删除 t_bookType 表中的某个图书类别之前,将该类别下的所有图书的 bookTypeId 置为 NULL,防止外键约束报错(或者实现级联操作逻辑)。
sql
DELIMITER $$
CREATE TRIGGER tr_booktype_delete
BEFORE DELETE ON t_bookType
FOR EACH ROW
BEGIN
-- 将该类别下的所有图书的 bookTypeId 置为 NULL
UPDATE t_book SET bookTypeId = NULL WHERE bookTypeId = OLD.id;
END $$
DELIMITER ;
注:OLD 关键字用于表示即将被删除或更新前的旧数据行。在包含多条 SQL 语句的触发器中,必须使用 BEGIN...END 包裹,并使用 DELIMITER 更改结束符。
4,查看触发器
我们可以通过以下两种方式查看数据库中已存在的触发器信息:
4.1 使用 SHOW TRIGGERS 语句查看触发器信息
sql
SHOW TRIGGERS;
该语句会列出当前数据库中所有触发器的基本信息(如名称、事件、表名、执行语句等)。
4.2 在系统表中查看触发器信息
在 MySQL 8 中,触发器信息存储在系统数据库 information_schema 的 TRIGGERS 表中。可以通过查询该表获取更详细的信息:
sql
SELECT * FROM information_schema.TRIGGERS WHERE TRIGGER_NAME = 'tr_book_price_default';
5,删除触发器
当触发器不再需要时,可以使用 DROP TRIGGER 语句将其删除。
基本语法:
sql
DROP TRIGGER 触发器名;
实际案例:
sql
DROP TRIGGER tr_book_price_default;
6,MySQL 8 触发器注意事项
- 触发时机 :
BEFORE触发器允许修改NEW值,而AFTER触发器不能修改NEW值(只能读取)。 - 事务支持:InnoDB 表上的触发器支持事务,如果触发器中发生错误,整个事务将回滚。
- 外键约束:触发器可以配合外键使用,但需注意执行顺序,避免死锁或约束冲突。
- 性能影响 :触发器在执行时对每一行(
FOR EACH ROW)都会触发,对于大数据量的批量操作,可能会带来较大的性能开销,建议在应用层能处理的情况下尽量少用触发器。 - 不可见性:触发器逻辑隐藏在数据库中,对于后续维护人员可能不够直观,需做好文档记录。