既然MySQL中InnoDB使用MVCC,为什么REPEATABLE-READ不能消除幻读

首页 / 常见问题 / 低代码开发 / 既然MySQL中InnoDB使用MVCC,为什么REPEATABLE-READ不能消除幻读
作者:低代码工具 发布时间:05-15 09:44 浏览量:2234
logo
织信企业级低代码开发平台
提供表单、流程、仪表盘、API等功能,非IT用户可通过设计表单来收集数据,设计流程来进行业务协作,使用仪表盘来进行数据分析与展示,IT用户可通过API集成第三方系统平台数据。
免费试用

REPEATABLE-READ不能消除幻读的原因:因为现象为幻读的并发问题是因为这些问题的影响范围超出了行级别,REPEATABLE-READ只能保证行级别的隔离性,但无法处理更高级别的隔离性问题。

一、REPEATABLE-READ不能消除幻读的原因

务隔离级别关注的是读操作的数据是否会受到其他并发事务的影响。在 REPEATABLE READ 隔离级别下,InnoDB 采用的是多版本并发控制(MVCC)来实现隔离性。通过MVCC,InnoDB将每一行数据版本化,每个事务读取的是它启动时的行版本快照,并不受其他事务的影响。因此,REPEATABLE READ 隔离级别能够避免脏读、不可重复读等问题。

然而,现象为幻读的并发问题则是因为这些问题的影响范围超出了行级别,MVCC 只能保证行级别的隔离性,但无法处理更高级别的隔离性问题。幻读问题的典型例子是:一个事务在读取某个表中的记录时,另外一个事务在此时向表中新增了一个记录,名列前茅个事务再次查询时,会出现名列前茅次查询和第二次查询结果不一致的现象,这就是幻读。

总之,REPEATABLE-READ 隔离级别采用了 MVCC 技术,可以有效地解决脏读、不可重复读等级别的隔离性问题,但不能消除幻读问题。

二、幻读

幻读(Phantom Read),是指当事务不是独立执行时发生的一种现象。事务A读取与搜索条件相匹配的若干行。事务B以插入或删除行等方式来修改事务A的结果集,然后再提交。幻读是指当事务不是独立执行时发生的一种现象,例如名列前茅个事务对一个表中的数据进行了修改,比如这种修改涉及到表中的“全部数据行”。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入“一行新数据”。那么,以后就会发生操作名列前茅个事务的用户发现表中还存在没有修改的数据行,就好象发生了幻觉一样一般解决幻读的方法是增加范围锁RangeS,锁定检索范围为只读,这样就避免了幻读。

在数据库定义的四种隔离级别中,较高隔离级别SERIALIZABLE_READ可以保证不出现幻读的问题。针对当前读,RR隔离级别保证对读取到的记录加锁(记录锁),同时保证对读取的范围加锁,新的满足查询条件的记录不能够插入(间隙锁),不存在幻读现象。

三、mysql介绍

1、简介

MySQL是一个关系型数据库管理系统由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是较好的 RDBMS(Relational Database Management System,关系数据库管理系统)应用软件之一。MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型和大型网站的开发都选择 MySQL 作为网站数据库。

2、索引功能

索引是一种特殊的文件(InnoDB 数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。索引不是使用广泛的,索引可以加快数据检索操作,但会使数据修改操作变慢。每修改数据记录,索引就必须刷新一次。为了在某种程度上弥补这一缺陷,许多 SQL 命令都有一个 DELAY_KEY_WRITE 项。这个选项的作用是暂时制止 MySQL 在该命令每插入一条新记录和每修改一条现有之后立刻对索引进行刷新,对索引的刷新将等到全部记录插入/修改完毕之后再进行。在需要把许多新记录插入某个数据表的场合,DELAY_KEY_WRITE 选项的作用将非常明显。另外,索引还会在硬盘上占用相当大的空间。因此应该只为最经常查询和最经常排序的数据列建立索引。注意,如果某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果。从理论上讲,完全可以为数据表里的每个字段分别建一个索引,但 MySQL 把同一个数据表里的索引总数限制为16个。

与 InnoDB数据表相比,在 InnoDB 数据表上,索引对 InnoDB 数据表的重要性要大得多。在 InnoDB 数据表上,索引不仅会在搜索数据记录时发挥作用,还是数据行级锁定机制的基础。“数据行级锁定”的意思是指在事务操作的执行过程中锁定正在被处理的个别记录,不让其他用户进行访问。这种锁定将影响到(但不限于)SELECT、LOCKINSHAREMODE、SELECT、FORUPDATE 命令以及 INSERT、UPDATE 和 DELETE 命令。出于效率方面的考虑,InnoDB 数据表的数据行级锁定实际发生在它们的索引上,而不是数据表自身上。显然,数据行级锁定机制只有在有关的数据表有一个合适的索引可供锁定的时候才能发挥效力。

3、MySQL 中文排序错误的解决方法

在 MySQL 数据库中,进行中文排序和查找的时候,对汉字的排序和查找结果是错误的。这种情况在 MySQL 的很多版本中都存在。如果这个问题不解决,那么 MySQL 将无法实际处理中文。出现这个问题的原因是:MySQL 在查询字符串时是大小写不敏感的,在编绎 MySQL 时一般以 ISO-8859 字符集作为默认的字符集,因此在比较过程中中文编码字符大小写转换造成了这种现象,一种解决方法是对于包含中文的字段加上“binary”属性,使之作为二进制比较,例如将“name char(10)”改成“name char(10)binary”。

如果你使用源码编译 MySQL,可以编译 MySQL 时使用 –with–charset=gbk 参数,这样 MySQL 就会直接支持中文查找和排序了。

4、新特性

  • 表和索引的分区
  • 行级复制
  • MySQL 基群基于磁盘的数据支持
  • MySQL 集群复制
  • 增强的全文本搜索函数
  • 增强的信息模式(数据字典)
  • 可插入的 API
  • 服务器日志表
  • XML(标准通用标记语言的子集)/ XPath支持
  • 实例管理器
  • 表空间备份
  • mysql_upgrade 升级程序
  • 内部任务/事件调度器
  • 新的性能工具和选项如 mysqlslap

延伸阅读1:mysql授权协议

MySQL 遵守的不只是 GPL 协议,而是双授权模式(dual license)即你在遵守 GPL 协议的开源项目使用 MySQL,需要遵守 GPL 协议方能使用。如果你在非开源项目使用(即软件不打算开放源代码),且该软件用来销售,则需要向 MySQL 支付相应 license 费用。

最后建议,企业在引入信息化系统初期,切记要合理有效地运用好工具,这样一来不仅可以让公司业务高效地运行,还能最大程度保证团队目标的达成。同时还能大幅缩短系统开发和部署的时间成本。特别是有特定需求功能需要定制化的企业,可以采用我们公司自研的企业级低代码平台织信Informat。 织信平台基于数据模型优先的设计理念,提供大量标准化的组件,内置AI助手、组件设计器、自动化(图形化编程)、脚本、工作流引擎(BPMN2.0)、自定义API、表单设计器、权限、仪表盘等功能,能帮助企业构建高度复杂核心的数字化系统。如ERP、MES、CRM、PLM、SCM、WMS、项目管理、流程管理等多个应用场景,全面助力企业落地国产化/信息化/数字化转型战略目标。 版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们微信:Informat_5 处理,核实后本网站将在24小时内删除。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系邮箱:hopper@cornerstone365.cn 处理,核实后本网站将在24小时内删除。

最近更新

国内有哪些低代码平台支持私有化部署?
06-10 16:33
企业管理系统哪些功能
05-27 10:08
小企业管理有哪些缺陷
05-27 10:08
外贸企业管理包括哪些
05-27 10:08
企业管理的风险有哪些
05-27 10:08
企业管理人物包括哪些
05-27 10:08
企业管理雅称有哪些内容
05-27 10:08
企业管理的发票包括哪些
05-27 10:08
印刷企业管理书籍有哪些
05-27 10:08

立即开启你的数字化管理

用心为每一位用户提供专业的数字化解决方案及业务咨询

  • 深圳市基石协作科技有限公司
  • 地址:深圳市南山区科技中一路大族激光科技中心909室
  • 座机:400-185-5850
  • 手机:137-1379-6908
  • 邮箱:sales@cornerstone365.cn
  • 微信公众号二维码

© copyright 2019-2024. 织信INFORMAT 深圳市基石协作科技有限公司 版权所有 | 粤ICP备15078182号

前往Gitee仓库
微信公众号二维码
咨询织信数字化顾问获取最新资料
数字化咨询热线
400-185-5850
申请预约演示
立即与行业专家交流