触发器也是存储例程中的一种,用于MySQL服务器在特定情况下自动调用,比如:
CREATE TRIGGER 触发器名 {BEFORE | AFTER} {INSERT | DELETE | UPDATE} ON 表名 FOR EATCH ROW BEGIN 触发器内容 END |
{BEFORE | AFTER}
表示触发器执行的时机:BEFORE
: 在语句执行前执行触发器AFTER
: 在语句执行后执行触发器{INSERT | DELETE | UPDATE}
表示对哪种语句设置触发器,只支持这三种语句。FOR EACH ROW BEGIN ... END
表示对影响到的每条记录执行相关的触发器内容:INSERT
语句来说,影响的记录是那些准备插入的新记录;DELETE
和UPDATE
语句来说,影响的记录是符合WHERE
条件的记录(如果没有WHERE
,则表示全部记录);MySQL提供了NEW
和OLD
两个单词来代表新记录和旧记录的值,它们的含义如下:
以下是一个触发器的示例:
DELIMITER $ CREATE TRIGGER bi_t1 BEFORE INSERT ON t1 FOR EACH ROW BEGIN IF new.m1 < 1 THEN SET new.m1 = 1; ELSEIF new.m1 > 10 THEN SET new.m1 = 10; END IF; END $ DELIMITER ; |
查看:
SHOW TRIGGERS; |
查看定义:
SHOW CREATE TRIGGER 触发器名 |
删除:
DROP TRIGGER 触发器名 |
用于MySQL服务器在某个时间点或者每隔一段时间自动执行某些语句。
CREATE EVENT 事件名 ON SCHEDULE { AT 某个确定的时间点 | EVERY 期望的时间间隔 [STARTS 开始日期和时间] [END 结束日期和时间] } DO BEGIN 具体的语句 END |
事件支持两种执行方式:在某个确定的时间点执行;每隔一段时间执行一次。
在某个确定的时间点执行,比如:
CREATE EVENT insert_t1_event ON SCHEDULE AT '2021-09-04 15:48:54' DO BEGIN INSERT INTO t1(m1, n1) VALUES(6, 'f'); END |
也可以通过表达式来指定时间点,比如:
CREATE EVENT insert_t1_event ON SCHEDULE AT DATE_ADD(NOW(), INTERVAL 2 DAY) DO BEGIN INSERT INTO t1(m1, n1) VALUES(6, 'f'); END |
CREATE EVENT insert_t1_event ON SCHEDULE EVERY 1 HOUR DO BEGIN INSERT INTO t1(m1, n1) VALUES(6, 'f'); END |