创建触发器

是一种自动操作,将两个表上的数据相关联,当A个表上的数据发生INSERT,UPDATE,DELETE操作时,B表的数据同步发生改变,增强数据的一致性
注意AB 不可调换

  1. DELIMITER $$
  2. create trigger payment_after_delete
  3. after delete on payments
  4. FOR EACH ROW
  5. BEGIN
  6. UPDATE invoices
  7. SET payment_total = payment_total - old.amount
  8. WHERE invoice_id = old.invoice_id;
  9. END $$
  10. DELIMITER ;

不同DMBS代码不一定相同
after 可换成 before
delete 可换成 UPDATE.INSERT
old可换成 NEW
即当表payments删除某行数据时,invoices表同时发生更新

查看触发器

image.png
后还可加’LIKE‘等来辅助查询
删除触发器

  1. DROP TRIGGER IF EXISTS payment_after_deleter

最好将这句加入到创建触发器的代码中,保存为一个脚本,方便后续的修改

使用触发器进行审计

先创建一个新表,里面的列项目应有,操作类型(action_type)用来记录进行的是DELETE或INSERT或 UPDATE;操作时间(action_date)

  1. USE sql_invoicing;
  2. CREATE TABLE payments_audit
  3. (
  4. client_id INT NOT NULL,
  5. date DATE NOT NULL,
  6. amount DECIMAL(9, 2) NOT NULL,
  7. action_type VARCHAR(50) NOT NULL,
  8. action_date DATETIME NOT NULL
  9. )

在到触发器中添加以下代码
image.png删除payments表中的某行

  1. delete from payments
  2. where payment_id = 6

最后效果
image.png

事件(EVENTS)

相当于一个自动化程序
image.png
INTERVAL;间隔

查看事件

  1. SHOW EVENTS LIKE '%事件名称%'

删除事件

  1. DROP EVENT IF EXISTS 事件名称

修改事件

  1. ALTER EVENT ……

ALTER关键词,与CREATE一样。但不用删除重建