1.脏读
当事务A在对数据进行修改时,事务A等待一段时间,此时在等待过程中,事务B记录下了A对数据修改的结果,等待时间过后,事务A继续修改,此时事务B误将这次的结果作为最终结果记录下来。
这就是脏读。
2.不可重复读
存在三个事务ABC。
事务A对数据进行修改,接下来事务B进行读取数据(事务B的多个SQL都要进行读操作),在执B的过程中,又有一个事务C对数据进行了修改。
就会使B里面的不同读操作,读出来的结果不一样。
所以再进一步规定。进一步加锁–读加锁
3.幻读
事务A先修改并提交数据。事务B进行读取数据。此时事务C没有修改事务B读取的数据,但是给对应的表进行了新增数据/删除数据等操作…导致事务B读到的数据集不同(已有的数据是一致的,只是数据的条数增加/减少),可以视为是“不可重复读”的特殊情况。
解决幻读:
所以的事务,“串行化”使事务严格按照一个接一个进行执行,此时完全没有并发了,执行的效率最低,同时事务的隔离性最高。
总结:
- 脏读–写加锁
- 不可重复读–读加锁
- 幻读–串行化
在解决实际问题中,要想要保证数据的准确性,就需要牺牲一些效率。具体跟业务场景所定。