数据库并发情况(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