InnoDB如何引擎通过Next-Key Lock部分解决幻读
1. 幻读问题概述
幻读是数据库并发事务中最棘手的一类问题。它指在同一事务内,连续执行两次相同的查询语句,第二次查询所返回的结果集与第一次查询的结果集不同。具体表现为:新增了符合查询条件的行。
示例场景
1 | -- 事务A |
InnoDB如何引擎通过Next-Key Lock部分解决幻读
幻读是数据库并发事务中最棘手的一类问题。它指在同一事务内,连续执行两次相同的查询语句,第二次查询所返回的结果集与第一次查询的结果集不同。具体表现为:新增了符合查询条件的行。
1 | -- 事务A |
在并发环境下,多个事务同时操作数据库时会产生各种并发问题。如果不进行隔离控制,可能会导致数据的不一致性。主要会出现以下问题:
索引是一种用于快速查询和检索数据的数据结构,其本质可以看成是一种排序好的数据结构。
索引的作用就相当于书的目录。打个比方: 我们在查字典的时候,如果没有目录,那我们就只能一页一页的去找我们需要查的那个字,速度很慢。如果有目录了,我们只需要先去目录里查找字的位置,然后直接翻到那一页就行了。
索引底层数据结构存在很多种类型,常见的索引结构有: B 树, B+树 和 Hash、红黑树。在 MySQL 中,无论是 Innodb 还是 MyIsam,都使用了 B+树作为索引结构。
优点:
目前 Oracle 官方推荐安装19c 的 linux 版本为Linux 7,不过强制安装到CentOS 8上,还是可以用的,接下来就来介绍怎么安装。
推荐先安装Oracle官方yum仓库,主要是为了通过yum安装 oracle-database-preinstall-19c.x86_64
,来帮助我们完成 Oracle Databse 19c 的依赖检查安装。
截至目前,MYSQL最新的版本为4月23号官方发布的8.0.20
版本,本文主要讲解CentOS 8 如何通过yum源安装 最新mysql-community-server-8.0.20
版本。
进入MySQL官方仓库^1, 在首页,最近的新版本仓库源安装包都会在这里,如果你对自己的系统了解,你可以直接找到自己Linux平台对应的官方源安装包直接安装。MySQL官方分别管理了yum源和apt源,进入里面,你就可以看到各个MySQL版本的安装包了。我的Linux为CentOS 8.1
, arch为 x86_64
,进到对应目录 https://repo.mysql.com/yum/mysql-8.0-community/el/8/x86_64/
,在这里,看到各种MySQL相关的安装包,其中的mysql80-community-release
字样的就是官方yum源的安装包,在首页也能找到,因为是CentOS8系统,直接首页浏览器搜索el8字样,就能看到一样的yum源安装包,最新的是mysql80。
目前的稳定版本 是4.2.X
,截止至20年4月初的最新是4.2.5
,也推荐安装此版本,也可以尝鲜,安装4.3.X
的unstable
版本。目前最新的是4.3.5
。
本文主要讲解 CentOS 8 如何安装配置 MongoDB 4.2.5。
事务指的是满足 ACID 特性的一组操作,可以通过 Commit 提交一个事务,也可以使用 Rollback 进行回滚。
事务被视为不可分割的最小单元,事务的所有操作要么全部提交成功,要么全部失败回滚。
MySQL 体系架构如下图所示:
为了提高完全相同的查询语句的响应速度,MySQL Server 会对查询语句进行 Hash 计算得到一个 Hash 值。MySQL Server 不会对 SQL 做任何处理,SQL 必须完全一致 Hash 值才会一样。得到 Hash 值之后,通过该 Hash 值到查询缓存中匹配该查询的结果。
如果有多个并发请求存取数据,在数据就可能会产生多个事务同时操作同一行数据。如果并发操作不加控制,不加锁的话,就可能写入了不正确的数据,或者导致读取了不正确的数据,破坏了数据的一致性。因此需要考虑加锁。
MyISAM 仅仅支持表级锁,一锁就锁整张表,这在并发写的情况下性非常差。
执行计划 是指一条 SQL 语句在经过 MySQL 查询优化器 的优化会后,具体的执行方式。
执行计划通常用于 SQL 性能分析、优化等场景。通过 EXPLAIN
的结果,可以了解到如数据表的查询顺序、数据查询操作的操作类型、哪些索引可以被命中、哪些索引实际会命中、每个数据表有多少行记录被查询等信息。
MySQL 为我们提供了 EXPLAIN
命令,来获取执行计划的相关信息。