简单了解下第一类丢失更新和第二类丢失更新

第一类丢失更新

时刻 事务1 事务2 备注
T0 开始事务 开始事务 初始化账户余额为1000
T1 扣减100余额 此时事务1中余额为900
T2 扣减100余额 此时事务2中余额为900
T3 提交事务 账户余额更新为900
T4 回滚事务 又把账户余额回滚成了1000

以上一个事务回滚,另一个事务提交引起的数据不一致问题的情况,就称为第一类丢失更新。

第二类丢失更新

时刻 事务1 事务2 备注
T0 开始事务 开始事务 初始化账户余额为1000
T1 读取余额为1000
T2 读取余额为1000
T3 扣减100余额
T3 提交事务 更新账户余额为900
T4 添加余额100 这时候没有去再做第二次查询,所以事务2中的余额还是1000,那么余额就变为1100,但是其实最终结果应该是1000
T5 提交事务 更新账户余额为1100

以上一个事务提交,另一个事务也提交引起的丢失更新问题的情况,就称为第二类丢失更新。

Ps:因为加入了事务隔离级别,而标准定义的所有隔离界别都不允许第一类丢失更新发生,所以第一类丢失更新的问题在现代数据库中已经不会出现了。

你可能感兴趣的:(Java开发)