数据库并发情况(database-level concurrency)
lost update 第一类丢失更新

事务A的回滚导致事务B的更新失败。
时序图:

last commit wins 第二类丢失更新
事务A已经完成,事务B完成后覆盖了事务A的结果:

时序图:

dirty read 脏读
事务A还没有提交的情况下事务B读取,读取完之后事务A回滚

时序图:

unreapetable read 不可重复读
在事务A的两次读取中事务B写了相应的数据

时序图:

phantom read 虚读
虚读与不可重读类似,都是在两次读取中另外的事务做了操作,不过这里的是insert或者delete导致两次查询结果集数量都不同

时序图:

参考文献:
- Java Persistence with Hibernate. Manning. 2nd Edition. Gavin King&Gary Gregory
网友评论