是时候好好理解MySQL事务了!

一、什么是事务?

事务 就是一组原子性的SQL操作,也就是说,事务内的SQL语句,要么全部执行成功,要么全部执行失败。

银行转账是解释事务的一个经典例子,假设一个🧑用户A(id=123)需要给👩用户B(id=456)转账1000元,假设目前用户A、用户B余额都是2000元(账户表:account),那么需要至少三个步骤:

  1. 检查用户A的账户余额是否高于1000元;
  2. 从用户A的账户余额中扣减去1000元;
  3. 给用户B的账户月增加1000元。

上述的三个操作必须实是在一个同一个事务中完成,任何一个步骤失败,则必须回滚所有的步骤,可以使用START TRANSACTION语句开启一个事务,然后要么使用COMMIT提交事务将修改的数据持久保留,要么使用ROLLBACK撤销所有的修改,事务的SQL语义样本如下:

1 START TRANSACTION;
2 SELECT balance FROM account WHERE customer_id = '123';
3 UPDATE account SET balance = balance - 1000.00 WHERE customer_id = '123';
4 UPDATE account SET balance = balance + 1000.00 WHERE customer_id = '456';
5 COMMIT;

🤔Tip:试想一下,如果执行到第四条语句的时候服务器崩了,会发生什么?🧑用户A明明转账了1000元给👩用户B,但是用户B没有收到,最后结果是用户A无端端没了1000块钱,如果用户A是你,我估计你要疯了~

很明显这就是一个事务问题,事务必须严格的遵守ACID特性&

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值