-
触发器是在插入、更新和删除语句前后自动执行的一堆SQL代码,但是触发器被触发后只会执行一次,通常我们使用触发器增强数据的一致性。
-
创建触发器
*sql-- 创建触发器 drop trigger if exists payments_after_insert; delimiter $$ -- 在 payments表 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; end $$ delimiter ; insert into payments values(default,5,3,'2019-01-01',10,1); select * from invoices; -- delete drop trigger if exists payments_after_delete; 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 ; delete from payments where invoice_id=3; -
查看触发器
- show triggers like'payments%'
-
使用触发器进行审计
- 触发器另一个常见用途,为了 审计的目的 而 记录对数据库的修改
sqldrop trigger if exists payments_after_insert; delimiter $$ -- 在 payments表 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',now()); end $$ delimiter ; drop trigger if exists payments_after_delete; 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; insert into payments_audit -- 审计记录 values(old.client_id,old.date,old.amount,'delete',now()); end$$ delimiter ; insert into payments values(default,5,3,'2019-01-01',10,1); select * from invoices; delete from payments where invoice_id=3; SELECT * FROM payments_audit; -- 查询审计记录表
SQL - 触发器
OLDERHARD2024-08-22 17:57
相关推荐
kylezhao20194 分钟前
C#异步和并发在IO密集场景的典型应用 async/await野犬寒鸦24 分钟前
ArrayList扩容机制深度解析(附时序图详细讲解)专注VB编程开发20年1 小时前
c# CSRedisCore vb.net清空所有键值程序边界1 小时前
数据库MySQL兼容版权限隔离深度体验:从兼容到安全增强的实战之路Victoria.a1 小时前
Mysql基础码云数智-大飞2 小时前
.NET 10 & C# 14 新特性详解:扩展成员 (Extension Members) 全面指南枫叶丹42 小时前
【Qt开发】Qt界面优化(五)-> Qt样式表(QSS) 子控件选择器山峰哥3 小时前
数据库工程中的SQL调优实践:从索引策略到查询优化的深度探索数据知道3 小时前
《深入掌握PostgreSQL数据库》 - 专栏介绍和目录计算机毕设VX:Fegn08953 小时前
计算机毕业设计|基于springboot + vue连锁门店管理系统(源码+数据库+文档)