为什么说只要数据库支持事务,第一类丢失更新就不会发生?
感觉从第一类丢失更新的定义上来讲,是完全有可能发生的啊:
第一类更新丢失是指,由于某个事务的回滚操作,参与回滚的旧数据将其他事务的数据更新覆盖了。比如如下两个事务,事务一先开启查询账户有1000元,然后准备存款100元,使其账户变为1100,此时事务尚未结束,其后,事务二发生了转账,并提交了事务,使账户金额变为900,而事务一并不知情,最后事务一没有提交,而是回滚了事务,将账户金额重新设置为1000。但其实,账户已经被转走了100元,这种回滚导致了更新丢失。
时间点 | 事务A | 事务B |
---|---|---|
T1 | 开始事务 | |
T2 | 开始事务 | |
T3 | 查询账户余额为1000元 | |
T4 | 查询账户余额为1000元 | |
T5 | 存入100元把余额改为1100元 | |
T6 | 提交事务 | |
T7 | 取出100元把余额改为900元 | |
T8 | 撤销事务 | |
T9 | 余额恢复为1000元(丢失更新) |