详解MySQL数据库之触发器
1 引言
本文是对MySQL中触发器的总结,从触发器概念出发,结合实例对创建触发器、使用触发器、删除触发器进行介绍。
2 触发器简介
MySQL触发器和存储过程一样,都是嵌入到MySQL的一段程序。触发器是由事件来触发某个操作,这些事件包括INSERT、UPDATE、DELETE。如果定义了触发器,当数据库执行这些语句的时候就会激活触发器执行相应的操作,触发程序是与表有关的命令数据库对象,当表上出现特定事件,将激活该对象。
触发器是一个特殊的存储过程,不同的是,执行存储过程要使用call语句来调用,而触发器的执行不需要用call来调用,也不需要手工启动,只要当一个预定义的事件发生,触发器就会被MySQL自动调用。触发器可以查询其他表,而且可以包含复杂的SQL语句。
3创建触发器
(1)创建只有一条执行语句的触发器
语法结构如下:
CREATE TRIGGER trigger_name trigger_time trigger_event ON table_name FOR EACH ROW trigger_stmt
trigger_time:标识触发事件,可以指定为before(时间发生前执行)或after(事件发生后执行);
trigger_event:标识触发事件,包括INSERT、UPDATE、DELETE;
table_name:触发器建立在哪个表上;
trigger_stmt:触发器执行语句。
(2)创建有多个执行语句的触发器
语法结构如下:
CREATE TRIGGER trigger_name trigger_time trigger_event ON table_name FOR EACH ROW BEGIN 语句执行列表 END
为演示触发器操作,我们先创建一下三个数据表:
create table tb_student( id int PRIMARY key auto_increment, name varchar(10));create table tb_before_trigger( id int PRIMARY key auto_increment, num int , time_now datetime NULL DEFAULT CURRENT_TIMESTAMP);create table tb_after_trigger( id int PRIMARY key auto_increment, num int , time_now datetime NULL DEFAULT CURRENT_TIMESTAMP);
delimiter //create trigger before_trigger before insert on tb_student for each row begin insert into tb_before_trigger (num) select count(*) from tb_student; end //delimiter ;
delimiter //create trigger after_trigger after insert on tb_student for each row begin insert into tb_after_trigger (num) select count(*) from tb_student; end //delimiter ;
insert into tb_student (name) values('zhangsan');
tb_student表:
tb_before_trigger表:
tb_after_trigger表:
可以看到,在tb_student表执行insert操作后,另外两个表也分别更新了记录,tb_before_trigger表num值为0,证明在tb_student执行insert操作前插入的;tb_after_trigger表num值为1,证明在tb_student执行insert操作后插入的——这就是before与after的区别。
对于其他条件触发器,使用方法与示例1和示例2类似,本文不在演示。
4 查看触发器
(1)show triggers语句
通过show triggers语句可以查看示例1和示例2中创建的触发器:
show triggers;
(2)在triggers表中查看触发器
在information_schema数据库的triggers表中存放在MySQL数据库中的所有触发器,可以通过查询语句进行查看:
select * from information_schema.triggers where trigger_name = 'before_trigger' ;
当不指定查询条件时,即是指查看所有触发器信息。
5 删除触发器
使用DROP TRIGGER语句可以删除触发器,基本语法结构如下:
DROP TRIGGER [schema_name] trigger_name
示例3:删除示例1中创建的触发器before_trigger
drop trigger before_trigger;
作者:奥辰
Github:https://github.com/ChenHuabin321
更多相关文章
- MySQL系列多表连接查询92及99语法示例详解教程
- Android(安卓)- Manifest 文件 详解
- Android的Handler机制详解3_Looper.looper()不会卡死主线程
- Selector、shape详解(一)
- android2.2资源文件详解4--menu文件夹下的菜单定义
- Android发送短信方法实例详解
- Android(安卓)读取资源文件实例详解
- 详解Android中的屏幕方向
- Android学习笔记(10)————Android的Listview详解1(ArrayAdapte