1. 数据库并发操作是会有那些异常情形
1)Lost update:
两个事务都同时更新一行数据,但是第二个事务却中途失败退出, 导致对数据的两个修改都失效了。
2)Dirty Reads:
一个事务开始读取了某行数据,但是另外一个事务已经更新了此数据但没有能够及时提交。这是相当危险的,因为很可能所有的操作
都被回滚。
3)Non-repeatable Reads:
一个事务对同一行数据重复读取两次,但是却得到了不同的结果。
4)Second lost updates problem:
无法重复读取的特例。有两个并发事务同时读取同一行数据,然后其中一个对它进行修改提交,而另一个也进行了修改提交。这就会造成
第一次写操作失效。
5)Phantom Reads:
2. 数据库的隔离级别
1)Read Uncommitted:读未提交
即使一个更新语句没有提交,但是别的事务读到这个改变
2)Read Committed:读已提交
意思就是语句提交以后即执行了COMMIT以后别的事务就能读到这个改变.
3) Repeatable Read:可以重复读
在同一个事务里面先后执行同一个查询语句的时候,得到的结果是一样的.
4) Serializable:序列化
事务执行的时候不允许别的事务并发执行.
3. 各种隔离级别对各种异常的控制能力
| LU丢失更新 | DR脏读 | NRR非重复读 | SLU二类丢失更新 | PR幻像读 |
未提交读 RU | Y | Y | Y | Y | Y |
提交读 RC | N | N | Y | Y | Y |
可重复读 RR | N | N | N | N | Y |
串行读 S | N | N | N | N | N |