为什么说只要数据库支持事务,第一类丢失更新就不会发生?

为什么说只要数据库支持事务,第一类丢失更新就不会发生?

感觉从第一类丢失更新的定义上来讲,是完全有可能发生的啊:

第一类更新丢失是指,由于某个事务的回滚操作,参与回滚的旧数据将其他事务的数据更新覆盖了。比如如下两个事务,事务一先开启查询账户有1000元,然后准备存款100元,使其账户变为1100,此时事务尚未结束,其后,事务二发生了转账,并提交了事务,使账户金额变为900,而事务一并不知情,最后事务一没有提交,而是回滚了事务,将账户金额重新设置为1000。但其实,账户已经被转走了100元,这种回滚导致了更新丢失。

时间点事务A事务B
T1开始事务
T2开始事务
T3查询账户余额为1000元
T4查询账户余额为1000元
T5存入100元把余额改为1100元
T6提交事务
T7取出100元把余额改为900元
T8撤销事务
T9余额恢复为1000元(丢失更新)

问题描述中t7时刻undo log记录的是已经提交的1100,所以回滚也不会更新丢失,本质靠的是记录排他锁跟undo log实现的

https://blog.csdn.net/libaoshan55/article/details/78175415

你这两个事务在操作同一个数据啊,事务一在执行的时候,锁表。这时候不会出现事务一还没有结束(表还被事务一锁定),事务二就开始操作该表的情况。