读脏数据:如果事务T2读取事务T1修改后但未提交的数据,事务T1由于某种原因中止而撤销,这时事务T2就读取了不一致的数据。数据库中将这种读取未提交且被撤销的数据称为脏读。
比如:
丢失更新:两个或多个事务都读取了同一数据值并修改,最后提交事务的执行结果覆盖了前面提交事务的执行结果,从而导致前面事务的更新被丢失。
比如:
不可重复读:是指事务Ti两次从数据库中读取的结果不同,可分为三种情况:
- 事务Ti读取一数据后,事务Tj对该数据进行了修改。当事务Ti再次读该数据时,则会读到与前一次不同的值。
- 事务Ti按某条件读取数据库中某些记录后,事务Tj删除了其中部分记录。当事务Ti再次按相同条件读取时,发现记录数变少了。(幻影现象1)幻读
- 事务Ti按某条件读取数据库中某些记录后,事务Tj插入了新的记录。当事务Ti再次按相同条件读取时,发现记录数变多了。(幻影现象2)幻读
比如:
但是,并不是所有的并发事务都会产生上述问题,如果一组并发执行事务的执行结果与它们串行执行得到的结果是相同的,那么就可以认为该并发执行的结果是正确的。