-
触发器是在插入、更新和删除语句前后自动执行的一堆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
相关推荐
lie..几秒前
30天从零开始学AI应用开发(Day 17):ChromaDB 上手:给本地文档建一个“外挂大脑”code_whiter30 分钟前
01-MySQL数据库基础weixin_382395231 小时前
本地部署 ERP 选型记录:从 Excel 到轻量系统的这几年2401_891409261 小时前
期货量化用得上的几类行情数据:逐笔、Level2、分钟线和五档tick海绵宝宝转agent2 小时前
基于Redis ZSet+AOP+注解实现限流注解算法imDwAaY2 小时前
Redis 也能做消息队列?从 Stream 的存储讲到消费确认@Mike@2 小时前
13-数据库学习笔记(查询执行处理模型)弈栈录3 小时前
MySQL 事务、索引与锁:后端开发必须掌握的数据库基础9624563 小时前
餐饮 SaaS 优惠券系统架构演进(三):优惠计算引擎——商品级计价、冲突策略与优惠分摊染指11103 小时前
135.Agent-多Agent框架-LangChain多智能体(SubAgents子代理)