028-86261949

当前位置:首页 > 技术交流 > MySQL触发器的作用及使用详解

MySQL触发器的作用及使用详解

2017/04/27 10:40 分类: 技术交流 浏览:589

MySQL在5的版本添加了触发器的功能。虽然现在功能还不是非常强大,但是还是可以帮忙咱们解决不少问题。

现在,咱们就从使用场景以及使用方式来介绍一下MySQL的触发器,并且在最后咱们完成一个使用触发器的小实例。

①.什么是触发器

触发器是与表事件相关的,由程序(这里我们主要是指的MySQL数据库)在监控到相应的操作(例如:添加一条数据)时激活执行。

在MySQL中,咱们可以去监听用户的DML语句,然后可以在执行前或者执行后再去完成我们自己的功能。

②.触发器能做什么

1. 在添加一条数据前,检查数据是否合理,例如检查邮件格式是否正确

2. 删除数据后,将这条数据进行一个备份(类似于回收站)

3. 商品买出(订单修改时审核),把库存表中的数量进行变化

4. 记录数据库操作日志(操作前后)

注:大家应该可以发现,上面的例子都是在表进行变化时让程序自己去完成一些功能。

这里的表进行变化:主要指的就是咱们执行 insert,update,delete语句时。

③.怎么创建触发器

触发器的语法:

CREATE TRIGGER 名称

{BEFORE|AFTER} {INSERT|DELETE|UPDATE} ON 表名

FOR EACH ROW 执行相应的sql

 

语法分析:

CREATE TRIGGER 名称

创建触发器,并且为它取一个名称

{BEFORE|AFTER}  {INSERT|DELETE|UPDATE}  ON 表名

在哪张表添加/删除/修改 的 之前/之后执行

FOR EACH ROW 执行相应的sql

每一行都会执行相应的操作

 

注意事项:

触发器的名称是唯一的,千万不要重复。MySQL5中是要求每个表唯一,而不是针对 整个数据库,但是还是建议在整个数据库范围中保证名称唯一。

每个表的每个事件每次都只能创建一次。比如说我们一个t_employee表中已经创建了一个insert之前的事件,就不能再加一次。

④. 案例(删除数据库保存删除信息)

第一步:准备相应的表

创建员工表

CREATE TABLE `t_employee` (

  `id` bigint(20) NOT NULL AUTO_INCREMENT,

  `name` varchar(20) DEFAULT NULL,

  `age` int(11) DEFAULT NULL,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

添加数据

insert into t_employee (name,age) values ('张三',23),('李四',43),('王五',13),('赵六',63),('陈七',47),('钱八',25)

效果:

 

创建回收站表

CREATE TABLE `t_trash` (

  `id` bigint(20) NOT NULL AUTO_INCREMENT,

  `data` varchar(255) DEFAULT NULL,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

第二步 :创建触发器:

CREATE TRIGGER trigger_del_employee

AFTER DELETE ON t_employee

  FOR EACH ROW insert into t_trash (`data`) values(

concat('t_employee 被删除,数据有:',OLD.id,'|',OLD.`name`,'|',OLD.age)

)

注:上面的OLD,指的就是当前咱们要删除的表,如OLD.age 就可以拿到咱们刚刚删除的表中的那一行的数据的age列的值。

 

第三步:测试

现在我去删除employee表中的一条数据:

delete from t_employee where id = 3;

现在我们可以看两张表的数据:

employee表中id为3的数据已经删除

 

 

这时候咱们看一下回收站中的数据:

 

刚才咱们的数据就已经保存在新的表中

⑤.删除触发器

这里要多说一句,咱们自己写代码创建触发器可能会写错,而触发器又不能更新或者覆盖。如果要修改触发器:只能够先删除触发器,然后再重新创建。

语法:

drop TRIGGER 触发器名称;

案例:

drop TRIGGER trigger_del_employee;

 

  本文由源码时代教学讲师提供,转载请注明出处!

#标签:MySQL触发器,源码时代