介绍触发器:mysql响应一下任意一条语句而自动执行的一条MySQL语句

比如:增改插,insert,update,select

用处:1,比如每当一个顾客进入数据表时,都要检查电话号码格式是否正确,email是否正确。

2,每当订购一个产品都要从库存中减去订购的数量。

3,无论何时删除一行都要保留存档一个副本。

这几个例子共同之处在于每个表发生更改时都要自动触发某个事件。

下面举个例子说明删除功能,

第一步创建触发器:

CREATE TRIGGER trigger_name
trigger_time
trigger_event ON tbl_name
FOR EACH ROW
trigger_stmt

其中:

trigger_name:标识触发器名称,用户自行指定;
trigger_time:标识触发时机,取值为BEFORE 或AFTER;
trigger_event:标识触发事件,取值为INSERT、UPDATE或DELETE;
tbl_name:标识建立触发器的表名,即在哪张表上建立触发器;
trigger_stmt:触发器程序体,可以是一句SQL语句,或者用BEGIN 和END 包含的多条语句。

由此可见,可以建立6种触发器,即:BEFORE INSERT、BEFORE UPDATE、BEFORE DELETE、AFTER INSERT、AFTER UPDATE、AFTER DELETE。

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

第一步:准备相应的表

创建员工表

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)

效果:


contain mysql 触发器 mysql触发器调用_contain mysql 触发器

 

创建回收站表

CREATE TABLE `t_trash` (
   `id` bigint(20) NOT NULL AUTO_INCREMENT,
   `data` varchar(255) DEFAULT NULL,
   PRIMARY KEY (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;


contain mysql 触发器 mysql触发器调用_contain mysql 触发器_02

 

第二步 :创建触发器:

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的数据已经删除


contain mysql 触发器 mysql触发器调用_数据库_03

 

 

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


contain mysql 触发器 mysql触发器调用_sql_04

 

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

⑤.删除触发器

如果要修改触发器:只能够先删除触发器,然后再重新创建。

语法:

drop TRIGGER 触发器名称;

案例:

drop TRIGGER trigger_del_employee;