参考文章:
上面两篇文章有详细解释,其中第二篇还有形象的事务图
要弄清楚这个问题,首先要知道什么是隔离级别、隔离级别的作用是什么。
讨论隔离级别的场景,主要是在 多个事务并发 的情况下
隔离级别:一个事务对数据库的修改与并行的另一个事务的隔离程度
作用,即要解决的问题:
1.脏读 (级别1可能会出现,级别2解决)
2.不可重复读 (级别2可能会出现,级别3解决)
3.幻想读 (级别3可能会出现,级别4解决)
oracle 的事务隔离级别:其他数据库的隔离级别应该也是这些
级别1——读未提交(read uncommitted)。事务A读到了事务B 未提交 的数据,可能出现 脏读,如果B回滚了事务,就会出现脏读
级别2——读提交(read committed)。事务A事先读取了数据,事务B紧接了更新了数据,并提交了事务,而事务A再次读取该数据时,数据已经发生了改变。可能出现 不可重复读
级别3——重复读(repeatable read)。 感觉这个不好理解,可能会出现 幻读
级别4——串行化(serializable)。 最高级别的隔离级别。通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,是在每个读的数据行上加共享锁。可能导致大量超时现象和锁竞争
oracle支持 2种 事务隔离级别:读提交、串行化 默认:读提交
mysql支持 4种 事务隔离级别。默认:可重复读
分别解决的问题具体见上面两篇文章
如何 查看/修改 oracle的事务隔离级别:待完善
锲而不舍,水滴石穿