-
触发器是在插入、更新和删除语句前后自动执行的一堆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
相关推荐
啵啵啵鱼11 小时前
Chrome 插件开发实战指南泡海椒11 小时前
JQuick-SQL “数据源 SPI”辨析:应用适配器与 Function SPI 的正确边界无毁的湖光-Al11 小时前
高可用之路-观测篇-那些年遇到过的指标幻觉段一凡-华北理工大学11 小时前
高炉能源系统智能化:热风炉、煤气与极致能效~系列文章02:走进热风炉:蓄热、换炉、送风的工艺机理紧跟先前的步伐11 小时前
Go AI Agent 实战 18|Tool Calling 的基本原理与完整执行流程EnCi Zheng11 小时前
AI Agent工具误调用怎么解决-从参数校验到高危二次确认的四层工程防线泡海椒12 小时前
JQuick-SQL 逻辑数据仓库:以注册数据集构建轻量分析层l1t12 小时前
DeepSeek辅助编写连接sqlite的CLI翔云12345612 小时前
Gaea中配置如何更新泡海椒13 小时前
JQuick-SQL JQuickTable 模型:XML 动态 SQL 的表封装边界