触发器

  • MySQL触发器(Trigger)是一种特殊的存储过程,
  • 它与表有关,当表上的特定事件(insert,update,delete)发生时,触发器会自动执行。
  • 可以使用触发器来实现数据约束,数据验证,数据复制等功能
    • 数据复制:通过创建触发器,在给一张表插入数据的同时给另一张表插入同样的数据
    • 数据验证:在插入或更新数据时,检查记录的某些字段是否符合要求,则拒绝插入或者更新,这样可以保证数据的完整性和一致性
  • 触发时间分为AFTER和BEFORE两种

创建触发器

1
2
3
4
5
6
7
8
9
10
DELIMITER $$
CREATE TRIGGER payments_after_delete
AFTER DELETE ON payments
FOR EACH ROW
BEGIN
UPDATE invoices
SET payment_total = payment_total - OLD.amount
WHERE invoice_id = OLD.invoice_id;
END$$
DELIMITER ;

查看触发器

1
SHOW TRIGGER 

删除触发器

1
DROP TRIGGER IF EXISTS [触发器]

事件

根据计划执行的任务或一堆SQL代码

创建事件

1
2
3
4
5
6
7
8
9
10
11
12
DELIMITER $$

CREATE EVENT yearly_dalete_stale_audit_rows
ON SCHEDULE
EVERY 1 YEAR -- 表示每年执行一次,可利用STARTS,ENDS 增加起止区间
-- AT + 具体日期 表示在该日期执行一次
DO BEGIN
DELETE FROM payments_aduit
WHERE action_date < NOW() - INTERVAL 1 YEAR;
END$$

DELIMITER ;

查看事件

1
SHOW EVENTS;

删除事件

1
DROP EVENT IF EXISTS [事件]

更改事件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
DELIMITER $$

ALTER EVENT yearly_dalete_stale_audit_rows -- 关键字为ALTER
ON SCHEDULE
AT '2024-05-18'
DO BEGIN
DELETE FROM payments_aduit
WHERE action_date < NOW() - INTERVAL 1 YEAR;
END$$

DELIMITER ;

-- ALTER还可以暂时启用或关闭事件
ALTER EVENT [事件] DISABLE / ENABLE;