资讯专栏INFORMATION COLUMN

自己对sql四个事务隔离性级别的理解

MSchumi / 795人阅读

摘要:另外,隔离性级别是针对一个数据库系统中所有事务而言的。对于多个并发的事务来说,彼此之间互相都是其它的事务。不允许做的事情,在看来也是自己对的限制。这一级别的可能的风险危害已经严重了一些,但其带来了更高的并发性,也有采用。

前言

所谓隔离性级别,就是指给一个事务(一旦开始)多大的权限,对自己的读写有怎样的限制。

另外,隔离性级别是针对一个数据库系统中所有事务而言的。对于多个并发的事务来说,彼此之间互相都是『其它的事务』。A不允许B做的事情,在B看来也是自己对A的限制。

很多文章把『隔离性级别』和『在某种隔离性级别下可能的对数据一致性的风险』这两件事写在一起,不作区隔,自然而然让人头大。

可能的风险是指可能性,只要有可能就会写下来。有时候有人会想,怎么可能会有这样的操作呢?这操作会是什么具体的场景?这是无关紧要的。实际上,这种操作真的出现在实际生活和场景中的出现率极低,也正因此这些级别尽管存在风险但仍被采用以追求数据库的效率。

『幻读 虚读 phantom read』,『脏读 dirty read』和『不可重复读 non-repeatble read』均不是任何隔离级别的别称,而是对某种可能的风险的概括性名称。

按本文顺序由上往下所对应的级别的可能风险的危害越来越大,并发程度越来越高,限制越来越少。并且下一级的可能风险一定包含上一级的可能风险,只是不再写出。

强制串行化 serializable

运行中的事务的权限最大,可以并且必须阻止其它任何事务的发生。由于别的事务根本无法发生,所以并不需要限制自己的读写,可以认为没有限制。

可能的风险:没有风险。

可重复读 repeatable read

运行中的事务不能阻止其它事务并发地同时运转,但自己读取到的记录对其它事务完全屏蔽,但不禁止其它事务访问自己在使用的表和其它记录。

可能的风险:对于被事务操作的数据不会出问题,但数据所在的表以及其它数据可能会变的和事务刚开始读数据时的不一样,即幻读、虚读。

这一级别的可能的风险的危害不大,但相比于强制串行化,允许了并发,带来了性能上的提升,所以这一级别被广泛使用。

读已提交 read committed

运行中的事务不能阻止其它事务并发地同时运转,对其它事务禁止对自己读取到的数据的修改,但不禁止读取。

可能的风险:事务t1读取数据A后,事务t2可以读到数据A的值但不能修改,等到事务t1提交结束后,事务t2手上的数据A的值已经过时(被变更)了。又或者说事务t2在事务t1前后两次读数据A的结果不一样,即不可重复读。

这一级别的可能的风险危害已经严重了一些,但其带来了更高的并发性,也有采用。

读未提交 read uncommited

事务彼此之间完全没有限制。

可能的风险:仓库管理员统计仓库中钢铁的数量(事务t1),此时一个车队拉了一吨钢铁进仓库(事务t2),导致仓库管理员认为钢铁仓库数量足够,结束统计(结束事务t1)。但车队进了仓库之后没有停留就开走了(事务t2未提交并且事务t2失败了并且回滚了),导致仓库中钢铁数量根本不够。这种读取到了一个还未提交的事务读写的读写的行为,即为脏读。

其风险发生的可能性高,危害程度大,即便并发性再好也不允许,不被任何数据库系统采用。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/32408.html

相关文章

  • 『浅入深出』MySQL事务实现

    摘要:当事务已经被提交之后,就无法再次回滚了,唯一能够撤回已经提交的事务的方式就是创建一个相反的事务对原操作进行补偿,这也是事务持久性的体现之一。 在关系型数据库中,事务的重要性不言而喻,只要对数据库稍有了解的人都知道事务具有 ACID 四个基本属性,而我们不知道的可能就是数据库是如何实现这四个属性的;在这篇文章中,我们将对事务的实现进行分析,尝试理解数据库是如何实现事务的,当然我们也会在文...

    CodeSheep 评论0 收藏0
  • 事务隔离级别(图文详解)

    摘要:事务隔离级别图文详解什么是事务事务是逻辑上的一组操作,要么都执行,要么都不执行。可串行化最高的隔离级别,完全服从的隔离级别。存储引擎在分布式事务的情况下一般会用到可串行化隔离级别。回滚会结束用户的事务,并撤销正在进行的所有未提交的修改。 该文已加入笔主的开源项目——JavaGuide(一份涵盖大部分Java程序员所需要掌握的核心知识的文档类项目),地址:https://github.c...

    taowen 评论0 收藏0
  • 事务隔离级别(图文详解)

    摘要:事务隔离级别图文详解什么是事务事务是逻辑上的一组操作,要么都执行,要么都不执行。可串行化最高的隔离级别,完全服从的隔离级别。存储引擎在分布式事务的情况下一般会用到可串行化隔离级别。回滚会结束用户的事务,并撤销正在进行的所有未提交的修改。 该文已加入笔主的开源项目——JavaGuide(一份涵盖大部分Java程序员所需要掌握的核心知识的文档类项目),地址:https://github.c...

    Gemini 评论0 收藏0
  • Spring中事务控制

    摘要:中的事务控制方式编程式事务管理通过手动编码控制事务的边界,可以实现细粒度的事务控制,一般用的较少。隔离级别控制并发访问下数据库的安全性。内部事务的回滚不会对外部事务造成影响。可能导致脏幻不可重复读允许在并发事务已经提交后读取。 1.事务的概念 事务是一组操作的执行单元,相对于数据库的单条操作而言,事务管理的是一组SQL指令,如增删改查等,事务的特性体现在事务内包含的SQL指令必须全部执...

    Vixb 评论0 收藏0
  • MySQL事务原理浅析

    摘要:时间取款事务转账事务开始事务开始事务查询账户余额为元汇入元把余额改为元查询账户余额为元不可重复读提交事务提交事务幻读幻读是读取到数据后,随后其他事务对数据发生了新增,无法再次读取。持久性一旦事务提交,则其所做的修改就会永久保存到数据库中。 前言 ​ 因为自己对数据的可靠性,可用性方面特别感兴趣,所以在MySQL事务方面看了很多资料,也看了很多博客,所以想到自己也写一篇博客整理整理...

    xiaotianyi 评论0 收藏0

发表评论

0条评论

MSchumi

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<