MySQL不可重复读案例
假设一个银行账户表account,有两个字段:accountId和balance。一个人有两个账户,分别为A和B,初始余额各为1000元。
现在使用两个事务进行操作:
事务1:查询账户A的余额,结果为1000元。
事务2:将账户A的余额减少100元。
事务1:再次查询账户A的余额,结果为900元。
此时事务1中同一个查询语句返回了两个不同的结果。造成这种情况的原因是事务2对于共享数据的修改对于事务1是不可见的。
如何避免MySQL不可重复读问题?
为了避免不可重复读问题,需要使用MySQL的ACID事务特性:
1. 事务的隔离级别应该设为“串行化”(Serializable)。
2. 事务的访问共享数据应该尽量少。
3. 使用锁来保证共享数据的一致性。