什么是触发器
触发器(trigger)用于监视某种情况并触发某种操作,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,而是由事件来触发。例如,当对某张表进行insert、delete、update操作时 就会触发执行它。
#创建触发器语法
CREATE TRIGGER trigger_name trigger_time trigger_event ON table_name FOR EACH ROW
参数说明:
- trigger_name:触发器名称
- trigger_time:触发时间,取值有before、after trigger_event:触发事件,取值有insert、update、delete table_name:触发器监控的表名
- trigger_stmt:触发执行的语句,可以使用OLD、NEW来引用变化前后的记录内容
- NEW.columnName:获取
INSERT
触发事件中新插入的数据 - OLD.columnName:获取
UPDATE
和DELETE
触发事件中被更新、删除的数据
测试数据及需求描述
当有新用户插入时,自动 给用户发送邮件
drop table if exists user_info;
drop table if exists email_info;
create table user_info(
id int not null auto_increment primary key,
name varchar(30),
email varchar(50)
);
insert into user_info(id, name, email) values(1, 'zhangsan', 'zhangsan@qq.com');
insert into user_info(id, name, email) values(2, 'lisi', 'lisi@qq.com');
create table email_info(
id int not null auto_increment primary key,
email varchar(50),
content text,
send_time datetime
);
触发器实战:给新用户发邮件
# 触发器实战:给新用户发邮件
delimiter //
// 触发时间 监控的表名
CREATE TRIGGER send_email_trigger AFTER INSERT ON user_info FOR EACH ROW
BEGIN
// 获取新插入的数据
insert into email_info(email, content, send_time) values(NEW.email, 'welcome to mysql team! ', now());
END
// delimiter ;
实战案例
创建表数据
mysql> select * from user_info;
+----+----------+-----------------+
| id | name | email |
+----+----------+-----------------+
| 1 | zhangsan | zhangsan@qq.com |
| 2 | lisi | lisi@qq.com |
+----+----------+-----------------+
2 rows in set (0.00 sec)
mysql> select * from email_info;
+----+-----------------+------------------------+---------------------+
| id | email | content | send_time |
+----+-----------------+------------------------+---------------------+
| 1 | zhangsan@qq.com | welcome to mysql team | 2020-06-06 00:19:25 |
| 2 | zhangsan@qq.com | welcome to mysql team! | 2020-06-06 00:24:39 |
| 3 | zhangsan@qq.com | welcome to mysql team! | 2020-06-06 00:26:26 |
| 4 | lisi@qq.com | welcome to mysql team! | 2020-06-06 00:26:33 |
+----+-----------------+------------------------+---------------------+
4 rows in set (0.00 sec)
创建触发器
mysql> delimiter //
mysql> CREATE TRIGGER send_email_trigger AFTER INSERT ON user_info FOR EACH ROW
-> BEGIN
-> insert into email_info(email, content, send_time) values(NEW.email, 'welcome to mysql team! ', now());
-> END
-> //
Query OK, 0 rows affected (0.02 sec)
插入数据
mysql> insert into user_info(id, name, email) values(3, 'st', 'st@qq.com');
-> //
Query OK, 1 row affected (0.01 sec)
mysql> delimiter ;
mysql> select * from email_info;
+----+-----------------+-------------------------+---------------------+
| id | email | content | send_time |
+----+-----------------+-------------------------+---------------------+
| 1 | zhangsan@qq.com | welcome to mysql team | 2020-06-06 00:19:25 |
| 2 | zhangsan@qq.com | welcome to mysql team! | 2020-06-06 00:24:39 |
| 3 | zhangsan@qq.com | welcome to mysql team! | 2020-06-06 00:26:26 |
| 4 | lisi@qq.com | welcome to mysql team! | 2020-06-06 00:26:33 |
| 5 | st@qq.com | welcome to mysql team! | 2020-06-06 00:45:31 |
+----+-----------------+-------------------------+---------------------+
5 rows in set (0.00 sec)
删除触发器
mysql> drop TRIGGER send_email_trigger;
Query OK, 0 rows affected (0.01 sec)