mysql触发器原理与用法实例分析

 更新时间:2020年04月16日 11:26:42   作者:随风行云  
这篇文章主要介绍了mysql触发器原理与用法,结合实例形式分析了mysql触发器基本概念、原理、用法及操作注意事项,需要的朋友可以参考下

本文实例讲述了mysql触发器原理与用法。分享给大家供大家参考,具体如下:

本文内容:

  • 什么是触发器
  • 创建触发器
    • 单条触发器语句
    • 多条触发器语句
  • 查看触发器
  • 删除触发器
  • 触发器的新旧记录引用

首发日期:2018-04-14


什么是触发器:

  • 触发器用来在某些操作之后,“自动”执行一些操作。(比如插入了新的学生信息,那么在班级表中应该修改学生数)。
  • 当insert delete update设置触发器之后,执行insert delete update操作就会自动触发设置的内容。
  • 一张表最大能有6个触发器(3*2,三种操作*两种时间(before|after))。


创建触发器:

  • 语法:create trigger 触发器名 before|after 事件 on 表名 for each row 触发器语句;
    • 触发器名建议为trigger_xxx,这样便于区分,触发器名不能重复。
    • before|after 代表触发器语句执行时间,如果是before,就是在insert delete update操作之前执行触发器语句;after就是之后。
    • 事件就是insert delete update操作中的一个。
    • for each row 是代表任何记录执行对应操作都会触发器。
    • 触发器语句就是触发器触发时要执行的语句。
    • 比如:下面是一个当插入新用户时,在用户创建时间表中插入一条新数据,是当前时间。
      create trigger trigger_addUserTime 
      before
       insert 
      on user_info 
      for each row 
      insert into usercreatetime(create_time) values(now());
create table user_info(
id int primary key auto_increment,
username varchar(20) not null,
password varchar(20) not null
)

create table usercreatetime(
id int primary key auto_increment,
create_time datetime
);

create trigger trigger_addUserTime before insert on user_info for each row insert into usercreatetime(create_time) values(now());

insert into user_info(username,password) values("admin","admin888");

select * from usercreatetime;

多条触发器语句情况:

  • 需要将多条语句包裹在begin end中
    • 比如:image
  • 但要注意,上述情况适用于非命令行模式(上面是在navicat中运行的),如果要命令行中执行需要修改命令结束符(mysql命令默认以“;”为语句结束符,如果我们不修改,那么键入一条触发器语句并以;结束时就会认为语句已经结束,然后就会因为语句不完整报错)【delimiter 自定义符号-- 临时修改语句结束符为指定符号】。
    • 【将结束符定义成$$就可以在触发器语句中使用;结束】
        delimiter $$ -- 一般定义成$$
        create trigger 触发器名 before|after 事件 on 表名 for each row 
        begin 
          语句;语句;
        end 
        $$
        
        delimiter ;
        -- 示例
        delimiter $$ -- 一般定义成$$
        create trigger trigger_addUserTime23 before insert on user_info for each row 
        begin 
        insert into usercreatetime(create_time) values(now());
        insert into usercreatetime(create_time) values(now());
        end 
        $$
        delimiter ;
    • imageimage


查看触发器:

  • 使用show triggers\G 查看所有触发器image
  • 在数据库information_schema中通过查看触发器表,来查看触发器:使用select * from  triggers\G;【当然可以以触发器名作为where条件查找数据】image
  • 查看触发器创建语句:show create trigger 触发器名\G;


删除触发器:

  • 使用drop trigger 触发器名;来删除触发器


触发器的新旧记录引用:

  • 对于某些情况有时候可能需要引用一下之前的数据,比如增加学生数需要知道之前的学生数
  • new是新插入的数据,old是原来的数据【插入的时候没有旧数据,删除没有新数据,更新既有旧又有新。(这里指的是事件类型)】
  • 使用odl\new.字段名来引用数据。(注意引用的是触发触发器(事件)的语句的数据)
  • 下面是一个例子:(当插入学生记录时,通过new.name获取新插入的学生的名字,然后将new.name插入到另一个表中)
      create table student(
      id int primary key auto_increment,
      name varchar(15) not null,
      gender varchar(15) not null
      );
      
      create table stu_info(
      name varchar(15) not null
      );
      
      create trigger addCount before insert on student 
      for each row 
      insert into stu_info values(new.name);
      
      insert into student(name,gender) values("lilei","male");
      select * from stu_info;

更多关于MySQL相关内容感兴趣的读者可查看本站专题:《MySQL查询技巧大全》、《MySQL事务操作技巧汇总》、《MySQL存储过程技巧大全》、《MySQL数据库锁相关技巧汇总》及《MySQL常用函数大汇总

希望本文所述对大家MySQL数据库计有所帮助。

相关文章

  • Navicat连接MySQL时报10060、1045错误及my.ini位置问题

    Navicat连接MySQL时报10060、1045错误及my.ini位置问题

    这篇文章主要介绍了Navicat连接MySQL的10060及1045报错,my.ini位置,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • innodb系统表空间维护方法

    innodb系统表空间维护方法

    下面小编就为大家带来一篇innodb系统表空间维护方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • mysql 8.0 错误The server requested authentication method unknown to the client解决方法

    mysql 8.0 错误The server requested authentication method unkno

    在本篇文章里小编给大家整理的是关于mysql 8.0 错误The server requested authentication method unknown to the client解决方法,有此需要的朋友们可以学习下。
    2019-08-08
  • MySQL安装出现starting the server报错的解决方案

    MySQL安装出现starting the server报错的解决方案

    如果电脑是第一次安装MySQL,一般不会出现这样的报错,如下图所示,本文主要介绍了MySQL安装出现starting the server报错的解决方案,感兴趣的可以了解一下
    2024-07-07
  • 从0到1学会MySQL单表查询

    从0到1学会MySQL单表查询

    这篇文章主要给大家介绍了关于如何从0到1学会MySQL单表查询的相关资料,单表查询是指从一张表数据中查询所需的数据,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • MySQL的几种安装方式及配置问题小结

    MySQL的几种安装方式及配置问题小结

    这篇文章主要介绍了MySQL的几种安装方式及配置,然后在文章底部给大家介绍了安装过程中的问题总结,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-07-07
  • 深入浅析Mysql联合索引最左匹配原则

    深入浅析Mysql联合索引最左匹配原则

    这篇文章主要介绍了Mysql联合索引最左匹配原则,使用联合索引的好处多多,具体内容详情大家跟随脚本之家小编一起学习吧
    2018-06-06
  • mysql 计算函数详情

    mysql 计算函数详情

    这篇文章主要介绍了mysql 计算函数,函数没有SQL的可移植性强 能运行在多个系统上的代码称为可移植的(portable)。相对来说,多数SQL语句是可移植的,在SQL实现之间有差异时,这些差异通常不那么难处理,下面来看看文章的具体内容吧
    2021-10-10
  • MySQL与Mongo简单的查询实例代码

    MySQL与Mongo简单的查询实例代码

    本文通过一个实例给大家用MySQL和mongodb分别写一个查询,本文图片并茂给大家介绍的非常详细,感兴趣的朋友参考下吧
    2016-10-10
  • Mysql5.7.17 winx64.zip解压缩版安装配置图文教程

    Mysql5.7.17 winx64.zip解压缩版安装配置图文教程

    这篇文章主要介绍了Mysql5.7.17 winx64.zip解压缩版安装配置图文教程,需要的朋友可以参考下
    2018-03-03

最新评论