MySQL_触发器
课 程 推 荐 我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈 PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)教程合集 👈👈 Oracle数据库教程:👉👉 Oracle数据库教程合集 👈👈 MySQL数据库教程:👉👉 MySQL数据库教程合集 👈👈 优 质 资 源 下 载 :👉👉 资源下载合集 👈👈 优 质 教 程 推 荐:👉👉 Python爬虫从入门到入狱系列 合集 👈👈 .
MySQL_触发器
- 触发器
触发器
- 触发器的引入
- 创建与使用触发器
- 查看触发器
- 删除触发器
- 触发器的引入
- 触发器(TRIGGER)是由事件来触发某个操作。这些事件包括 INSERT 语句、UPDATE 语句和 DELETE 语句。当数据库系统执行这些事件时,就会激活触发器执行相应的操作。
- 创建与使用触发器
- 创建只有一个执行语句的触发器
CREATE TRIGGER 触发器名 BEFORE | AFTER 触发事件ON 表名 FOR EACH ROW执行语句
- 创建有多个执行语句的触发器
DELIMITER && CREATE TRIGGER 触发器名 BEFORE | AFTER 触发事件ON 表名 FOR EACH ROWBEGIN执行语句1;执行语句2;执行语句3;...执行语句4;END && DELIMITER ;
- 参数说明
-- BEFORE:在触发事件发生之前 -- AFTER:在触发事件发生之后 -- ON 表名 FOR EACH ROW:指定表的每一行执行触发事件都执行下面的执行语句 -- DELIMITER:定义结束符。其实就是告诉mysql解释器,该段命令是否已经结束了,mysql是否可以执行了。默认情况下,delimiter是分号;。在命令行客户端中,如果有一行命令以分号结束,那么回车后,mysql将会执行该命令。
- 示例1(创建一个执行语句的触发器)
- 先在t_bookType表增加bookNum字段,用于统计该类型书本的数量
- 创建触发器,在t_book表中新增书籍,t_booktype表中的书本数量根据新增书籍的类型相应增加
CREATE TRIGGER trig_book AFTER INSERTON t_book FOR EACH ROWUPDATE t_booktype SET booknum=COALESCE(booknum,0)+1 WHERE new.booktypeid=t_booktype.id
- 触发器解释
CREATE TRIGGER trig_book AFTER INSERT -- 创建触发器,命名trig_book,指定在insert操作之后执行ON t_book FOR EACH ROW -- 指定t_book表每一行执行insert操作都将执行下面的执行语句UPDATE t_booktype SET booknum=COALESCE(booknum,0)+1 WHERE new.booktypeid=t_booktype.id -- insert执行之后要执行的执行语句new.booktypeid=t_booktype.id -- new:过渡变量,指代刚刚插入(更新)的那一条数据 -- old:过渡变量,指代刚刚删除的那一条数据
- 示例2(创建多个执行语句的触发器)
- 创建t_log表,用于记录操作
- 创建t_test表,用于测试执行语句
-- 定义结束符为|,告诉MYSQL解释器出现|,则表示该段代码结束了,可以执行了 DELIMITER | CREATE TRIGGER trig_book2 AFTER DELETEON t_book FOR EACH ROW BEGINUPDATE t_booktype SET booknum=COALESCE(booknum,0)-1 WHERE old.booktypeid=t_booktype.id;INSERT INTO t_log VALUES(NULL,NOW(),'在t_book表中删除了一条数据');DELETE FROM t_test WHERE old.booktypeid=t_test.id; END -- 告诉MYSQL解释器,该段代码结束了,可以执行了 | -- 将MYSQL的结束符重新定义为 ; DELIMITER ;
- 查看触发器
- SHOW TRIGGERS 语句查看所有触发器信息
show triggers;
- 在系统表 triggers 表中查看触发器信息
- 删除触发器
DROP TRIGGERS 触发器名;