≡
  • 网络编程
  • 数据库
  • CMS技巧
  • 软件编程
  • PHP笔记
  • JavaScript
  • MySQL
位置:首页 > 数据库 > MySQL

MySQL数据库之触发器的简单示例

人气:237 时间:2021-07-13

这篇文章主要为大家详细介绍了MySQL数据库之触发器的简单示例,具有一定的参考价值,可以用来参考一下。

感兴趣的小伙伴,下面一起跟随四海网的小玲来看看吧!

目录
  • 1 引言
  • 2 触发器简介
  • 3创建触发器
  • 4 查看触发器
  • 5 删除触发器
  • 6 总结

 

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

分析MySQL数据库之触发器

  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

分析MySQL数据库之触发器

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

);

分析MySQL数据库之触发器

  示例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 ;

分析MySQL数据库之触发器

  示例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 ;

分析MySQL数据库之触发器

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

代码如下:


insert into tb_student (name) values('zhangsan');

分析MySQL数据库之触发器

  插入后,查看三个表中数据:

  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;

分析MySQL数据库之触发器

  输出结果:

 

  (2)在triggers表中查看触发器

 

  在information_schema数据库的triggers表中存放在MySQL数据库中的所有触发器,可以通过查询语句进行查看:

代码如下:


select * from information_schema.triggers where trigger_name = 'before_trigger' ;

分析MySQL数据库之触发器

  输出结果:

  当不指定查询条件时,即是指查看所有触发器信息。

 

5 删除触发器

  使用DROP TRIGGER语句可以删除触发器,基本语法结构如下:

代码如下:


DROP TRIGGER [schema_name] trigger_name

分析MySQL数据库之触发器

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

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

代码如下:


drop trigger before_trigger;

分析MySQL数据库之触发器

 

6 总结

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

作者:奥辰

Github:https://github.com/ChenHuabin321

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

本文来自:http://www.q1010.com/177/19511-0.html

注:关于MySQL数据库之触发器的简单示例的内容就先介绍到这里,更多相关文章的可以留意四海网的其他信息。

关键词:

您可能感兴趣的文章

上一篇:MySQL查询表是否被锁的简单示例
下一篇:MySQL 聚簇索引与非聚簇索引的简单示例
热门文章
  • mysql 修改character_set_server为utf-8的简单示例
  • 解决MySQL丢失文件localhost.localdomain.pid、mysql.sock的示例
  • MySQL 数据类型binary和varbinary的简单示例
  • MySQL:reading initial communication packet问题解决方法
  • MySql 表类型MYISAM、InnoDB区别
  • bash: mysql: command not found 的解决方法
  • MYSQL默认用户名ROOT修改方法
  • MySQL 常用命令菜鸟教程
  • MySQL 使用命令行新建用户并授予权限
  • MySql 数据库物理文件存放位置查看示例
  • 最新文章
    • MySQL查看死锁与解除死锁的简单示例
    • MySQL 慢查询的功能实例
    • MySQL查看死锁与去除死锁的简单示例
    • MySQL找出未提交事务的SQL的简单示例
    • MySQL锁阻塞的的简单示例
    • MySQL中的binary类型使用操作的示例
    • SQL优化教程之in与range查询的简单示例
    • MySQL 的 21 个规范、优化最佳实践!
    • MySQL 字符类型大小写敏感的简单示例
    • 解决mybatis-plus分页传入参数后sql where条件没有limit分页信息的问题

四海网收集整理一些常用的php代码,JS代码,数据库mysql等技术文章。