美文网首页SQL开发手册
数据库四大隔离级别

数据库四大隔离级别

作者: 筑梦_Dream | 来源:发表于2019-11-04 14:06 被阅读0次

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

    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:序列化,事务的操作都会串行,也就是说不管几个事务要干啥,都排队一个个来,解决了三种情况。

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

    相关文章

      网友评论

        本文标题:数据库四大隔离级别

        本文链接:https://www.haomeiwen.com/subject/rkxdbctx.html