上篇文章简单介绍了一下MySQL的基本操作之DDL、DML、DQL、DCL,在DDL中简单提了一下触发器,存储过程和函数,本篇文章将详细介绍触发器!
1、触发器作用:简单来说,触发器就是绑定在某个表上的一个特定数据库对象,当在这个表上发生某种触发器所监听的操作时,将会触发某种动作。
2、触发器用法:
CREATE TRIGGER trigger_name trigger_time trigger_event ON table_name FOR EACH ROW
BEGIN
...trigger_statement... #触发器的逻辑实现
END
参数解释:
trigger_name:触发器的名称
trigger_event:触发的事件,包括:INSERT,UPDATE,DELETE
trigger_time:触发的时间点,包括:BEFORE(事件之前触发),AFTER(事件之后触发)
table_name:触发器所在表
trigger_statement:触发器被触发之后,所执行的数据库操作逻辑,可以为单一的数据库操作,或者一系列数据库操作集合,也可以包含一些判断等处理逻辑;
注意:
(1)同一张表中不能同时存在两个类型一样的触发器;
(2)触发事件和触发时间点总共可以组成3组6种不同的触发器,分别为:(BEFORE INSERT,AFTER INSERT)、(BEFORE UPDATE,AFTER UPDATE)、(BEFORE DELETE,AFTER DELETE);
(3)触发事件:
① INSERT:在插入数据的时候触发,插入数据的动作包括INSERT,LOAD DATA,REPLACE操作,即:发生这三种操作时,都会触发INSERT类型的触发器;
② UPDATE:数据发生变更时触发,即:发生了UPDATE操作;
③ DELETE:从表中删除某一行的时候触发,即:发生了DELETE或者REPLACE操作;
(4)创建触发器的时候,由于在触发器的trigger_statement语句中有逻辑,而每个逻辑都会有结束符,默认为";",故需要在创建之前先定义定界符。防止SQL语句在执行之前被存储引擎(存储引擎:MySQL数据库的插件,后续介绍)解析的时候碰见";"而提前结束,提示语法错误。
3、示例:
(1)示例1:现在test_db中有两个表,一个为员工信息表t_emp,一个为部门统计表t_dept_statis,他们的表结构分别如下所示:
员工信息表:
CREATE TABLE `t_emp` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) NOT NULL DEFAULT '', #员工姓名
`age` TINYINT(4) DEFAULT NULL, #年龄
`gender` ENUM('F','M') DEFAULT NULL, #性别
`dept_id` INT, #部门编号
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=UTF8;
部门员工数量统计表&#