mysql 触发器 使用方法详解

一、什么是mysql触发器?

MySQL的触发器和存储过程一样,都是嵌入到mysql的一段程序。利用MySQL触发器可以对表进行增、删、改操作同时响应另一张表做出相同的操作。

 

二、mysql创建触发器

 

1、老版本mysql语法:

CREATE TRIGGER <触发器名称> --触发器必须有名字,最多64个字符,可能后面会附有分隔符.它和MySQL中其他对象的命名方式基本相象.

{ BEFORE | AFTER } --触发器有执行的时间设置:可以设置为事件发生前或后。

{ INSERT | UPDATE | DELETE } --同样也能设定触发的事件:它们可以在执行insert、update或delete的过程中触发。

ON <表名称> --触发器是属于某一个表的:当在这个表上执行插入、 更新或删除操作的时候就导致触发器的激活. 我们不能给同一张表的同一个事件安排两个触发器。

FOR EACH ROW --触发器的执行间隔:FOR EACH ROW子句通知触发器 每隔一行执行一次动作,而不是对整个表执行一次。

<触发器SQL语句> --触发器包含所要触发的SQL语句:这里的语句可以是任何合法的语句, 包括复合语句,但是这里的语句受的限制和函数的一样。

 

2、新版本mysql语法:

  1. CREATE
  2.     [DEFINER = { user | CURRENT_USER }]
  3.     TRIGGER trigger_name
  4.     trigger_time trigger_event
  5.     ON tbl_name FOR EACH ROW
  6.     [trigger_order]
  7.     trigger_body
  8. trigger_time: { BEFORE | AFTER }
  9. trigger_event: { INSERT | UPDATE | DELETE }
  10. trigger_order: { FOLLOWS | PRECEDES } other_trigger_name

 

注意

或许你必须拥有相当大的权限才能创建触发器(CREATE TRIGGER),如果你已经是Root用户,那么就足够了。这跟SQL的标准有所不同。

mysql5.7新版本语法发生了一些小小的变化,同时也可以自定义用户,语法相对来说简单了很多,原理和老版本还是一样的;

 

准备工作:

1、创建表tab1

sql命令:

  1. DROP TABLE IF EXISTS tab1;
  2. CREATE TABLE tab1(
  3.     tab1_id varchar(11)
  4. );

 

2、创建表tab2

sql命令:

  1. DROP TABLE IF EXISTS tab2;
  2. CREATE TABLE tab2(
  3.     tab2_id varchar(11)
  4. );

 

实例1:

1、创建触发器:t_afterinsert_on_tab1

作用:增加tab1表记录后自动将记录增加到tab2表中

 

老版本sql命令:

  1. DROP TRIGGER IF EXISTS t_afterinsert_on_tab1;
  2. CREATE TRIGGER t_afterinsert_on_tab1
  3. AFTER INSERT ON tab1
  4. FOR EACH ROW
  5. BEGIN
  6. insert into tab2(tab2_id) values(new.tab1_id);
  7. END;

 

新版本sql命令:

  1. DROP TRIGGER IF EXISTS t_afterinsert_on_tab1;
  2. CREATE
  3.    TRIGGER t_afterinsert_on_tab1
  4.    AFTER INSERT
  5.    ON tab1 FOR EACH ROW
  6.    insert into tab2(tab2_id) values(new.tab1_id);

 

2、向tab1表插入一条数据做测试;

sql命令:

  1. INSERT INTO tab1(tab1_id) values('0001');

 

3、查看tab1表和tab2表的结果;

sql命令:

  1. SELECT * FROM tab1;
  2. SELECT * FROM tab2;

 

结果如下图:

创建触发器后查看tab1表和tab2表的结果

 

实例2:

1、创建触发器:t_afterdelete_on_tab1

作用:删除tab1表记录后自动将tab2表中对应的记录删去

 

老版本sql命令:

  1. DROP TRIGGER IF EXISTS t_afterdelete_on_tab1;
  2. CREATE TRIGGER t_afterdelete_on_tab1
  3. AFTER DELETE ON tab1
  4. FOR EACH ROW
  5. BEGIN
  6. delete from tab2 where tab2_id=old.tab1_id;
  7. END;

 

新版本sql命令:

  1. DROP TRIGGER IF EXISTS t_afterdelete_on_tab1;
  2. CREATE
  3. TRIGGER t_afterdelete_on_tab1
  4. AFTER DELETE
  5. ON tab1 FOR EACH ROW
  6. delete from tab2 where tab2_id=old.tab1_id;

 

2、删除tab1表一条数据

sql命令:

  1. DELETE FROM tab1 WHERE tab1_id='0001';

 

3、查看tab1表和tab2表的结果

sql命令:

  1. SELECT * FROM tab1;
  2. SELECT * FROM tab2;

 

结果如下图:

创建触发器后查看tab1表和tab2表的结果

 

三、mysql查看触发器

和查看数据库(show databases;)查看表格(show tables;)一样,查看触发器的语法如下:

  1. SHOW TRIGGERS [FROM schema_name];

其中,schema_name 即 Schema 的名称,在 MySQL 中 Schema 和 Database 是一样的,也就是说,可以指定数据库名,这样就不必先“USE database_name;”了。

 

实例:

1、查看tab1表下面所有的触发器:

sql命令:

  1. SHOW TRIGGERS

 

结果如下图:

查看tab1表下面所有的触发器

 

2、查看test数据库下面的触发器,tabl表属于test数据库:

sql命令:

  1. SHOW TRIGGERS FROM test

 

四、mysql删除触发器

和删除数据库、删除表格一样,删除触发器的语法如下:

  1. DROP TRIGGER [IF EXISTS] [schema_name.]trigger_name

 

实例:

1、删除触发器‘t_afterdelete_on_tab1’

sql命令:

  1. DROP TRIGGER IF EXISTS t_afterdelete_on_tab1
    A+
发布日期:2017年07月21日 14:58:18  所属分类:MySQL
最后更新时间:2017-07-21 14:59:06
付杰
  • ¥ 15元
  • 市场价:15元
  • ¥ 1999.9元
  • 市场价:8999元
  • ¥ 199.0元
  • 市场价:399.0元
  • ¥ 99.0元
  • 市场价:129.0元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:2   其中:访客  0   博主  0

  1. 头像 小破孩 0

    学到了,要不是在技术群里沟通,都不知道咋用,在以后的项目中可以尝试一下 :cool: :cool: :cool:

  2. 头像 南大街 1

    我目前项目还没有用上触发器