SQL - 触发器
时间:2025/8/12 22:51:24来源:https://blog.csdn.net/m0_74403543/article/details/141350273 浏览次数:0次
- 触发器是在插入、更新和删除语句前后自动执行的一堆SQL代码,但是触发器被触发后只会执行一次,通常我们使用触发器增强数据的一致性。
- 创建触发器
-
-- 创建触发器
drop trigger if exists payments_after_insert;
delimiter $$
-- 在 payments表 insert 之后 触发
create trigger payments_after_insertafter insert on paymentsfor each row -- 作用于受影响的每一行
beginupdate invoicesset payment_total=payment_total + new.amountwhere 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_deleteafter delete on paymentsfor each row
beginupdate invoicesset payment_total=payment_total-old.amountwhere invoice_id=old.invoice_id;
end$$
delimiter ;delete
from payments
where invoice_id=3;
- 查看触发器
- show triggers like'payments%'
- 使用触发器进行审计
- 触发器另一个常见用途,为了 审计的目的 而 记录对数据库的修改
-
drop trigger if exists payments_after_insert;
delimiter $$
-- 在 payments表 insert 之后 触发
create trigger payments_after_insertafter insert on paymentsfor each row -- 作用于受影响的每一行
beginupdate invoicesset payment_total=payment_total + new.amountwhere 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_deleteafter delete on paymentsfor each row
beginupdate invoicesset payment_total=payment_total-old.amountwhere 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 - 触发器
版权声明:
本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。
我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com
责任编辑: