• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    详解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_name:用户自定义的触发器名称;

      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

    当触发器有至少一条的执行语句时,多条执行语句需要用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
    
    );

      示例1:创建一个名为before_trigger的触发器,该触发器会在每次对表tb_student执行insert操作前触发,触发时会往before_trigger表插入一条包含tb_student表总记录数的记录。

    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 ;

      示例2:创建一个名为after_trigger的触发器,该触发器会在每次对表tb_student执行insert操作前触发,触发时会向before_trigger表插入一条包含tb_student表总记录数的记录。

    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 ;

      来测试一下示例1和示例2中创建的触发器,往tb_student表中插入一条数据(插入前3个表没有任何记录):

    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

      其中,schema_name表示数据库名称,是可选参数,如果省略则表示从当前数据库中删除触发器。

      示例3:删除示例1中创建的触发器before_trigger

    drop trigger before_trigger;

    6 总结

    在某些时候,触发器可以起到锦上添花的作用,但是,触发器的效率并不高,所以还是尽量少用。

    作者:奥辰

    Github:https://github.com/ChenHuabin321

    以上就是详解MySQL数据库之触发器的详细内容,更多关于MySQL 触发器的资料请关注脚本之家其它相关文章!

    您可能感兴趣的文章:
    • Mysql触发器在PHP项目中用来做信息备份、恢复和清空
    • 一篇文章带你深入了解Mysql触发器
    • MySQL触发器的使用
    • mysql 触发器语法与应用示例
    • MySql视图触发器存储过程详解
    • mysql触发器实时检测一条语句进行备份删除思路详解
    上一篇:Datagrip2020下载MySQL驱动失败的问题
    下一篇:区分MySQL中的空值(null)和空字符('')
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    详解MySQL数据库之触发器 详解,MySQL,数据库,之,触发器,