场景构思
现有两个好友需要使用支付宝转钱操作
1:A准备向B转账100元
update xxx set 余额=余额-100 where 主键=1
2:银行收到A的转账请求,从A账户上扣除100元
3:银行准备向B账户打款100元
update xxx set 余额=余额+100 where 主键=2
问题
执行完2操作后,突然停电。待电力系统回复之后,银行并不会继续执行第3步,甚至连1,2步的操作记录都丢失
A:认为已经转账成功
银行:并没有产生发生转账事情
B:没有收到A的转账
扫描二维码关注公众号,回复:
1639752 查看本文章
其实整个过程可以用一个词来描述:数据库中的数据产生了“不一致性”
解决
将1和2包装成一个事务
如果执行成功:提交事务,改变原来的数值
如果执行失败:回滚事务,返回原来的数值