MySQL之事务理解

场景构思

现有两个好友需要使用支付宝转钱操作

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的转账

其实整个过程可以用一个词来描述:数据库中的数据产生了“不一致性”

解决

将1和2包装成一个事务

如果执行成功:提交事务,改变原来的数值

如果执行失败:回滚事务,返回原来的数值

猜你喜欢

转载自blog.csdn.net/mmake1994/article/details/80721628