MySQL入门 | day08 | 触发器、事件、事务

一、触发器

触发器是一种特殊类型的存储过程,不由用户直接调用。

创建触发器时会对其进行定义,以便在对特定表或列作特定类型的数据修改时执行。

触发器可以查询其他表,而且可以包含复杂的 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'
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值