• MySQL 数据库 隔离 的 四个级别 和 事务 的 四个特性


    原文:数据库隔离的四个级别分别是什么

    数据库隔离的四个级别分别是:
    1、读取未提交内容;
    2、读取提交内容;
    3、可重复读;
    4、可串行化。
    隔离级别采取不同的锁类型来实现,
    若读取的是同一个数据可能发生脏读、幻读等问题。
    事务的四个性质:
    1、原子性(Atomicity):事务中的全部操作在数据库中是不可分割的,要么全部完成,要么全部不执行。
    2、一致性(Consistency):几个并行执行的事务,其执行结果必须与 按某一顺序串行执行的 结果相一致。
    3、隔离性(Isolation):事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的。
    4、持久性(Durability):对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障。

    数据库隔离的四个级别分别为:

    Read Uncommitted(读取未提交内容)

    在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。

    本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。

    读取未提交的数据,也被称之为脏读(Dirty Read)。

    Read Committed(读取提交内容)

    这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。

    它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。

    这种隔离级别 也支持所谓的不可重复读(Nonrepeatable Read),

    因为同一事务的其他实例在该实例处理其间可能会有新的commit,

    所以同一select可能返回不同结果。

    Repeatable Read(可重读)

    这是MySQL的默认事务隔离级别,

    它确保同一事务的多个实例在并发读取数据时,

    会看到同样的数据行。

    不过理论上,这会导致另一个棘手的问题:幻读 (Phantom Read)。

    简单的说,幻读指当用户读取某一范围的数据行时,

    另一个事务又在该范围内插入了新行,

    当用户再读取该范围的数据行时,会发现有新的“幻影” 行。

    InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了该问题。

    Serializable(可串行化)

    这是最高的隔离级别,它通过强制事务排序,

    使之不可能相互冲突,从而解决幻读问题。

    简言之,它是在每个读的数据行上加上共享锁。

    在这个级别,可能导致大量的超时现象和锁竞争。

    隔离级别设置错误会产生的问题

    这四种隔离级别采取不同的锁类型来实现,

    设置错误的话,在读取同一个数据时,就容易发生问题。例如:

    脏读(Drity Read):

    事务1在更新一份数据,事务2在此时读取了这份数据,

    由于某些原因,前事务1回滚了操作,则事务2所读取的数据就是错的。

    不可重复读(Non-repeatable read):

    在一个事务的两次查询之中数据不一致,违背一致性原则。 

    这可能是两次查询过程中间插入了一个事务提交,更新了原有的数据,

    而且由此两次查询中间可能产生误判,误操作。

    幻读(Phantom Read):

    在一个事务的两次查询中数据笔数不一致,例如有一个事务查询了几列(Row)数据,

    而另一个事务却在此时插入了新的几列数据,先前的事务在接下来的查询中,就会发现有几列数据是它先前所没有的。

    在MySQL中,实现了这四种隔离级别,分别有可能产生问题如下所示:

    隔离级别 脏读 不可重复读 幻读
    读未提交
    读已提交 X
    可重复读 X X
    可串行化 X X X
  • 相关阅读:
    [论文阅读笔记] A Multilayered Informative Random Walk for Attributed Social Network Embedding
    [论文阅读笔记] Large-Scale Heterogeneous Feature Embedding
    [论文阅读笔记] Community-oriented attributed network embedding
    微信小程序下拉选择器(反UI的产品设计)
    浮点数
    Centos7利用rpm升级OpenSSH到openssh-8.1p1版本
    CentOS7.6使用you-get下载视频素材
    mysql5.7以后group by 报错 sql_mode=only_full_group_by的解决方法
    【MySQL】Mysql提示:Out of sort memory, consider increasing server sort buffer size
    【Python】Windows系统安装pip.whl
  • 原文地址:https://www.cnblogs.com/chang09/p/16562889.html
Copyright © 2020-2023  润新知