MySQL-5.7 创建及查看触发器
2017-12-13 11:13
525 查看
触发器的作用是当表上有对应SQL语句发生时,则触发执行。
1.语法
CREATE [DEFINER = { user | CURRENT_USER }] TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW [trigger_order] trigger_body trigger_time: { BEFORE | AFTER } trigger_event: { INSERT | UPDATE | DELETE } trigger_order: { FOLLOWS | PRECEDES } other_trigger_name
说明:
- trigger_name:触发器的名称,不能与已经存在的触发器重复;
- trigger_time:{ BEFORE | AFTER },表示在事件之前或之后触发;
- trigger_event::{ INSERT |UPDATE | DELETE },触发该触发器的具体事件;
- tbl_name:该触发器作用在tbl_name上;
2.关键说明
- Definer关键词用来指定trigger的安全环境;
- trigger_time指定触发器的执行时间,BEFORE和AFTER指定触发器在表中的每行数据修改前或者后执行;
- trigger_event指定触发该触发器的集体事件:
INSERT 当新的一行数据插入表中时触发,如执行insert,load data,replace语句插入新数据
UPDATE 当表的一行数据被修改时触发,如执行update语句时
DELETE 当表的一行数据被删除时触发,如执行delete,replace语句时 - 当执行insert into...on duplicate key update语句时,当碰到重复行执行update时,则触发update下的触发器;
- 从5.7.2版本开始,可以创建具有相同trigger_time和trigger_event的同一个表上的多个触发器,默认情况下,按照创建时间依次执行,通过指定FOLLOWS/PRECEDES改变执行顺序,即FOLLOWS时表示新创建的触发器执行,PRECEDES则表示新触发器先执行;
- trigger_body 表示触发器触发之后要执行的一个或多个语句,在内部可以引用涉及表的字段,OLD.col_name表示行数据被修改或删除之前的字段数据,NEW.col_name表示数据被插入或修改之后的字段数据;
3.实例
mysql> delimiter // mysql> create trigger simple_trigger -> after update -> on students for each row -> begin -> insert into students_bak values(old.sid,old.sname,new.sname,old.gender,new.gender,now()); -> end// Query OK, 0 rows affected (0.16 sec) mysql> select * from students; +-----+--------+--------+---------+ | sid | sname | gender | dept_id | +-----+--------+--------+---------+ | 1 | Andrew | -1 | 1 | | 2 | Andy | -1 | 1 | | 3 | Bob | -1 | 1 | | 4 | Ruth | -1 | 2 | | 5 | Mike | -1 | 2 | | 6 | John | 0 | 3 | | 7 | Cindy | 1 | 3 | | 8 | Susan | 1 | 3 | +-----+--------+--------+---------+ 8 rows in set (0.01 sec) mysql> update students set sname='abc',gender=1 where sid=1; Query OK, 1 row affected (0.03 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from students; +-----+-------+--------+---------+ | sid | sname | gender | dept_id | +-----+-------+--------+---------+ | 1 | abc | 1 | 1 | | 2 | Andy | -1 | 1 | | 3 | Bob | -1 | 1 | | 4 | Ruth | -1 | 2 | | 5 | Mike | -1 | 2 | | 6 | John | 0 | 3 | | 7 | Cindy | 1 | 3 | | 8 | Susan | 1 | 3 | +-----+-------+--------+---------+ 8 rows in set (0.00 sec) mysql> select * from students_bak; +--------+----------+----------+-----------+-----------+---------------------+ | oldsid | oldsname | newsname | oldgender | newgender | tstamp | +--------+----------+----------+-----------+-----------+---------------------+ | 1 | Andrew | abc | -1 | 1 | 2017-12-13 11:04:52 | +--------+----------+----------+-----------+-----------+---------------------+ 1 row in set (0.00 sec)
4.查看触发器(information_schema)
mysql> select TRIGGER_SCHEMA,TRIGGER_NAME,DEFINER,ACTION_STATEMENT from TRIGGERS where TRIGGER_SCHEMA='course'; +----------------+----------------+----------------+-----------------------------------------------------------------------------------------------------+ | TRIGGER_SCHEMA | TRIGGER_NAME | DEFINER | ACTION_STATEMENT | +----------------+----------------+----------------+-----------------------------------------------------------------------------------------------------+ | course | simple_trigger | root@localhost | begin insert into students_bak values(old.sid,old.sname,new.sname,old.gender,new.gender,now()); end | +----------------+----------------+----------------+-----------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
5.删除触发器
DROP TRIGGER [IF EXISTS] [schema_name.]trigger_name
- if exists用来避免删除不存在的触发器时引发的报错
- 当你执行drop table时,表上的触发器也被drop掉了
mysql> drop trigger simple_trigger; Query OK, 0 rows affected (0.00 sec)
相关文章推荐
- MySQL-5.7创建及查看数据库表
- MySQL-5.7创建及查看数据库
- mysql 触发器不能创建表
- mysql创建触发器
- mysql创建、删除、查看数据库
- mysql触发器查看
- mysql 查看创建历史
- mysql创建定时器(event),查看定时器,打开定时器,设置定时器时间
- 查看mysql表结构和表创建语句的方法
- MySQL索引的查看创建和删除学习
- mysql查看创建数据表的DDL语句
- mysql5.7创建用户授权删除用户撤销授权
- MySQL创建触发器实现统一主机下两个数据库的表同步
- mysql查看表结构和表创建语命令
- mysql查看触发器 删除触发器
- mysql查看所有存储过程,函数,视图,触发器,表
- 【MySQL学习笔记】2:创建/删除/查看数据库,数据表
- MySQL之表的创建、删除、修改、删除、查看及索引
- MySQL索引 查看、创建、删除
- mysql数据表的创建、查看、删除和…