在我们了解数据库隔离级别前先来回顾一下数据库读数据时可能遇到的问题:

(1)脏读

一个事务对数据进行更新操作,但还完成,此时另一事务读取该数据,如果此时第一个事务由于操作失败进行了回滚,那么此时另外事务读取的数据就是脏数据。

(2)不可重复读

例如事务A在读取某一数据,而事务B立马修改了这个数据并且提交事务给数据库,事务A再次读取该数据就得到了不同的结果,发送了不可重复读。

ps:在某些情况下,不可重复读并不是问题,比如我们多次查询某个数据当然以最后查询得到的结果为主。但在另一些情况下就有可能发生问题,例如对于同一个数据A和B依次查询就可能不同,A和B就可能打起来了……

(3)幻读

事例:事务A将表中所有数据都清为0,就在这时事务B插入了一条2的数据,此时A再查看发现出现了一条为2的数据,就像发生了幻觉一样。

四种隔离级别

(1)Read uncommitted

  读未提交,读的事务还没有提交就会被读,会出现脏读的现象。  —-写允许读

(2)Read committed

  读提交,就是只读提交后的事务,若有事务对数据进行更新(UPDATE)操作时,读操作事务要等待这个更新操作事务提交后才能读取数据,可以解决脏读问题。出现了一个事务范围内两个相同的查询却返回了不同数据,这就是不可重复读。  —-写禁止读

(3)Repeatable read

  可重复读,就是在开始读取数据(事务开启)时,不再允许修改操作。  —-读禁止写,写禁止所有事务。

(4)Serializable

  Serializable 是最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。但是这种事务隔离级别效率低下,比较耗数据库性能,一般不使用。

版权声明:本文为leonandyou原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/leonandyou/p/11306466.html