一、触发器
触发器是一种特殊类型的存储过程,不由用户直接调用。
创建触发器时会对其进行定义,以便在对特定表或列作特定类型的数据修改时执行。
触发器可以查询其他表,而且可以包含复杂的 SQL 语句。
它们主要用于强制服从复杂的业务规则或要求。 例如,您可以根据客户当前的帐户状态,控制是否允许插入新订单。
触发器也可用于强制引用完整性,以便在多个表中添加、更新或删除行时,保留在这些表之间所定义的关系
原文链接:https://blog.csdn.net/yefufeng/article/details/119982107
触发器的作用
1.1-1.3 增强数据一致性
1.4 审计, 记录对数据库的修改
1.1创建触发器
我们在payments中每加入一条数据,那么invoices在payment_total中的数据就会更新
DELIMITER $$
CREATE TRIGGER payments_after_insert
AFTER INSERT ON payments
FOR EACH ROW
BEGIN
UPDATE invoices
SET payment_total = payment_total + NEW.amount
WHERE invoice_id = NEW.invoice_id;
END $$
DELIMITER ;
NEW关键字表示得到的新的数值
此外还有OLD关键字 在更新或删除行时使用
-- -- -- 触发器中我们可以修改任何数据 ,除了触发器所在表,否则会无限循环
在payments中插入数据
INSERT INTO payments
VALUES (DEFAULT , 5, 3, '2019-01-01', 10,1)
则invoices中数据更新完成
1.2 查看触发器
SHOW TRIGGERS
SHOW TRIGGERS LIKE 'payments%'
1.3 删除触发器
DROP TRIGGER IF EXISTS 触发器名称
1.4 使用触发器进行审计
整体代码:
DELIMITER $$
DROP TRIGGER IF EXISTS payments_after_insert;
CREATE TRIGGER payments_after_insert
AFTER INSERT ON payments
FOR EACH ROW
BEGIN
UPDATE invoices
SET payment_total = payment_total + NEW.amount
WHERE invoice_id = NEW.invoice_id;
INSERT INTO payments_audit
VALUES(NEW.client_id, NEW.date, NEW.amount, 'INSERT'