原文地址:https://dwz.cn/yCYkG78b触发器和存储过程一样,都是嵌入到MySQL的一段程序 。不同的是,执行存储过程需要使用CALL语句来调用,而触发器是由事件触发某些操作,这些事件包括INSERT、UPDATE、DELETE 。一旦定义了触发程序,当数据库执行这些语句时,就会激发触发器执行相应的操作 。本片博客将通过实例介绍触发器的定义、创建、查看以及删除 。
作者:best.lei
- 创建触发器
CREATE TRIGGER trigger_name trigger_time trigger_event ON tb_name FOR EACH ROW trigger_statement
其中trigger_name表示触发器名称;trigger_time表示触发器时机,可以指定为BEFORE或AFTER;trigger_event标识触发事件,包括INSERT、UPDATE和DELETE;tb_name标识在哪张表上建立触发器;trigger_statement是触发程序体 。触发程序可以使用BEGIN和END作为开始和结束,中间包含多条语句 。
我们在以往的学生成绩表上创建一个触发器,该触发器记录最新插入的数据信息,代码执行如下:
创建触发器:CREATE TRIGGER p_in AFTER INSERT ON tb_score FOR EACH ROW BEGIN SET @info=CONCAT('studentID=', NEW.sID, ', classID=', NEW.cID, ', grade=', NEW.grade); END //向tb_score表中插入值:INSERT INTO tb_score VALUE(3,1,88);查看变量@info的值:SELECT @info;
文章插图
- 查看触发器
1.SHOW TRIGGERS语句查看触发器信息,语法格式为:SHOW TRIGGERSG;
文章插图
2..当触发器较少时,可以通过SHOW TRIGGERS查看 。如果触发器很多,且需要查看特定触发器的信息,则通过在information_schema数据库中的triggers表中查找更方便 。具体语法格式如下:
SELECT * FROM information_schema.trigger WHERE condition; 不指定condition则默认查询所有的触发器 。如查看指定名称的触发器的详细信息:SELECT * FROM information_schema.triggers WHERE trigger_name='p_in'G;
文章插图
如上执行结果显示:TRIGGER_SCHEMA表示触发器所在的数据库;TRIGGER_NAME表示触发器的名称;EVENT_OBJECT_TABLE表示在哪个数据表上触发;ACTION_STATEMENT表示触发器触发时执行的具体操作;ACTION_ORIENTATION表示在每条记录上都触发;ACTION_TIMING表示触发的时刻是AFTER 。
- 删除触发器
如想删除创建的p_in触发器,只需执行:DROP TRIGGER test.p_in;
文章插图
- 注意事项
推荐阅读
- ThinkPHP 5.0添加mysql存session驱动
- 如何用sqlserver触发器实现某张表插入数据同时写到另外一张表
- Mysql 为什么要选择 B+Tree
- Mysql通讯协议分析
- 分享mysql配置文件my.cnf一键生成器
- Mysql中ACID的原理?
- 超详细的SqlServer数据库触发器总结
- 从淘宝MySQL数据库经典案例来看innodb如何设计主键索引
- mysql在线修改表结构,如何避免锁表?
- CentOS环境下MySQL 5.7主从复制搭建