博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mysql 隔离级别
阅读量:7168 次
发布时间:2019-06-29

本文共 1309 字,大约阅读时间需要 4 分钟。

1.Read Uncommitted(未提交读)

       此隔离级别中,事务的修改对其他的事务也是可见的,事务可以读取未提交的数据,也称为脏读(Dirty Read)。很少使用此级别。

2.Read Commited(提交读)

       大多数数据库系统默认使用该隔离级别(mysql不是),此隔离级别中事务从开始到提交数据之前,所有的操作对于其他事物都是不见的,也称作不可重复读(nonrepeatable),造成2次同样的查询可能会得到不同的结果。

3.Repeatable Read(可重复读)

       可重复读解决了脏读的问题,保证了在同一个事务中多次读取同样的记录的结果是一致的。但是还发解决另外一个问题--幻读(Phantom Read):是指在读取某个范围的记录时,另外一个事务又在该范围内插入了新的记录,当之前的事务再次读取该范围的记录时,会产生幻行(Phantom Row)。InnoDB和XtraDB存储引擎采用多版本并发控制(MVCC,Multiversion Concurrency Control)解决幻读的问题。其中MVCC大致可以理解为一个行级锁的变种,但是在很多情况下避免了加锁操作,因此开销更低。MVCC的实现是通过保存数据在某个时间点的快照来实现,因此,对于每个事务来说,看到的数据都是一致的。但是对于各个事务的开始时间不同,每个事务对同一张表的,同一时刻看到的数据可能是不一样的。

       下面说下InnoDB的简化版MVCC的实现机制:

        MVCC通过在每行记录后面保存两个隐藏的列来实现,分别代表,行的创建时间,行的过期时间,这里时间是指的系统版本号,而不是真正的时间。每开始一个新的事物,系统版本号会自动递增。下面列举在Repeatable Read隔离级别下,MVCC的具体操作:
SELECT:
               InnoDB会根据以下两个条件检查每行记录:
               a.InnoDB只查找版本早于当前事物版本的数据行(也就是行的系统版本号小于或等于事 物的系统版本号),这样可以保证事物读取的行,要么是在事物开始前就已经存在,要么是事务自身插入或修改的。
               b.行的删除版本要么未定义,要么大于当前事物的版本号。这样可以确保事物读到行在事务开始前未被删除。
INSERT:
             InnoDB为新插入的每一行保存当前系统版本号作为行版本号。
DELETE:
             InnoDB为删除的每一行保存当前系统版本号作为行删除标识。
UPDATE:
             InnoDB为插入的一行新纪录,保存当前系统保本号作为行版本号,同时保存当前系统版本号到原来的行作为行删除标识。

       保存这两个额外的版本号,使大多数的读操作都可以不用加锁,是的读数据的操作简单,性能很好,并且会读取到符合标准的行,不足时每行记录都需要额外的存储空间,需要做更多的行检查及额外的维护操作。

4.Serializable(可串行化)

       Serializable是最高的隔离级别,它通过强制事务串行执行,避免了前面的幻读问题,简单来说,Serializable会在读取的每一行的数据上都加锁,所以可能导致大量的超时和锁竞争。只有在非常确保数据一致性而且可以接受没有并发的情况下,才考虑采用该级别。

转载地址:http://snqwm.baihongyu.com/

你可能感兴趣的文章
如果说搞技术没前途,那是因为你技术搞的还不够深
查看>>
柳州市第一职业技术学校中心机房双活虚拟引擎容灾备份系统需求
查看>>
我的友情链接
查看>>
NV 3D viosn的设置
查看>>
在CentOS系统下安装Red5
查看>>
移动端消除click事件的延迟效果
查看>>
bgp与igp交互的配置
查看>>
[官方文档] oracle官方文档总汇(9i,10g,11gR1, 11gR2)
查看>>
有关树的面试题
查看>>
《Linux运维之道》的截图 2-网路简单排错
查看>>
centos7 关于把安装的服务加入开机启动的问题
查看>>
jsp-简单小程序(乘法表、)
查看>>
Linux装机简介
查看>>
raid0、raid1、raid5、raid10
查看>>
Crypto-RSA-1
查看>>
如何学习深度学习?
查看>>
dtree--JS树形控件【转】
查看>>
AI芯片的厂商竞争激烈,计算力将会发展如何?
查看>>
我的友情链接
查看>>
Linux下的 MySQL安装与使用
查看>>