SQL开发手册

数据库四大隔离级别

2019-11-04  本文已影响0人  筑梦_Dream

首先定义四大隔离级别要解决的三种情况:脏读,不可重复读,幻读

  1. 脏读:事务A读到了事务B未提交的事务数据。

例:A正在给B转账,此时A把钱转到了B账户但A事务还没提交,此时B去查询,发现了这笔转账,开开心心去消费,此时A发现自己多打个0,事务回滚,此时B欲哭无泪,心酸Ing。

  1. 不可重复读:事务A多次读取同一笔数据,结果不完全一致

例:A在一个事务内读取一笔数据,此时B修改了这笔数据,并且提交了事务,A再次读取这笔数据,发现两次读取到的结果并不一致,看来真的是不可重复读啊!和可重复读正好相反。

  1. 幻读:一个事务两次读取一定范围内的数据,结果个数不一致(不可重复读侧重单笔记录的细节,这个侧重整体个数)。

例:A查询一批数据,返回50笔记录,此时B又在此条件内添加了或删除一笔数据并提交,A再次读取,可能就是51或49笔了。

好了,下面看一下数据库针对这三种问题,设计的四种隔离级别

  1. read uncommited:读未提交,安全性最低,上述三种情况都可能出现。
  2. read commited:读已提交,避免了脏读的出现,因为它只允许读到其他事务已经提交的数据,但避免不了不可重复读和幻读。
  3. repeatable read:可重复读,注意,这是数据库让你放心的重复读,避免了不可重复读的情况,这种级别数据库在你读这笔数据的时候,在一个事务内,再读一次还是同样的结果,即使在这期间有另一个事务对这笔数据更改了,但避免不了幻读。
  4. serializable:序列化,事务的操作都会串行,也就是说不管几个事务要干啥,都排队一个个来,解决了三种情况。

以上四种隔离级别,虽然依次解决的问题越来越好,但是性能也是不断下降,所以要根据实际情况设置,一般默认就好。

上一篇下一篇

猜你喜欢

热点阅读