【MySQL】可重复读下的幻读

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS MySQL,高可用系列 2核4GB
简介:
【背景】
在研究gap lock的时候,参考了一篇文章 http://www.mysqlperformanceblog.com/2012/03/27/innodbs-gap-locks/ 按照文章的实验来进行测试并不会出现幻读。
【概念】
幻读(Phantom Read) 是指当用户读取某一范围的数据行时,B事务在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影”行。InnoDB和Falcon存储引擎通 过多版本并发控制机制解决了幻读问题。
【验证】
做一个小的测试来验证 innodb在可重复读隔离级别上面不会出现幻读。
实验版本
root@127.0.0.1 : yang 19:49:51>  select version();
+------------+
| version()  |
+------------+
| 5.5.18-log |
+------------+
1 row in set (0.00 sec)
两个会话都是 REPEATABLE-READ 事务隔离级别
root@127.0.0.1 : yang 19:56:11> select @@tx_isolation;
+-----------------+
| @@tx_isolation  |
+-----------------+
| REPEATABLE-READ |
+-----------------+
1 row in set (0.00 sec)
且在操作的是两个会话要打开事务,start transaction
session1 20:22:05> insert into gap values (11);--未提交。
Query OK, 1 row affected (0.00 sec)

--会话2 查看无id=11的记录,不允许脏读!
session2 20:22:26> select * from gap where id>9; 
+------+
| id   |
+------+
|   12 |
|   13 |
|   15 |
|   17 |
|   20 |
|   33 |
|   39 |
|   42 |
|   43 |
+------+
9 rows in set (0.00 sec)
会话1 提交
session1 20:22:21> commit;
Query OK, 0 rows affected (0.00 sec)
会话2 依然查看不到id=1的记录!
session2 20:22:32> select * from gap where id>9;
+------+
| id   |
+------+
|   12 |
|   13 |
|   15 |
|   17 |
|   20 |
|   33 |
|   39 |
|   42 |
|   43 |
+------+
9 rows in set (0.00 sec)
从本例来看 innodb 已经解决了幻读问题。对于本实验如有不妥,望各位看官不吝赐教。
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
SQL 关系型数据库 MySQL
【Mysql】数据库事务,脏读、幻读、不可重复读
【Mysql】数据库事务,脏读、幻读、不可重复读
【Mysql】数据库事务,脏读、幻读、不可重复读
|
关系型数据库 MySQL 数据库
MySQL事务的隔离级别以及脏读、幻读和不可重复读
MySQL事务的隔离级别以及脏读、幻读和不可重复读
|
SQL 关系型数据库 MySQL
你知道MySQL是如何解决幻读的吗?
你知道MySQL是如何解决幻读的吗?
559 0
你知道MySQL是如何解决幻读的吗?
|
存储 SQL 关系型数据库
MySQL的可重复读级别能解决幻读吗?MYSQL指的幻读到底是什么?
首先,要搞懂这个问题,我们需要先了解Mysql事务的四种隔离级别以及平常我们说的幻读的概念。由于这俩概念比较简单,强哥在这几就简单的带大家复习一下。
MySQL的可重复读级别能解决幻读吗?MYSQL指的幻读到底是什么?
|
SQL Oracle 关系型数据库
Mysql模拟事物的隔离级别【脏读、不可重复读、幻读】
Mysql模拟事物的隔离级别【脏读、不可重复读、幻读】
258 0
Mysql模拟事物的隔离级别【脏读、不可重复读、幻读】
|
SQL 关系型数据库 MySQL
【MySQL】可重复读隔离级别是否解决了幻读?
面试官:可重复读隔离级别是否解决了幻读了吗?不清楚是吧,没关系,那我们今天面试就先到这。
353 0
【MySQL】可重复读隔离级别是否解决了幻读?
|
关系型数据库 MySQL 数据库
Mysql-详解脏读、不可重复读、幻读
Mysql-详解脏读、不可重复读、幻读
Mysql-详解脏读、不可重复读、幻读
|
关系型数据库 MySQL 数据库
MySQL事务的隔离级别以及脏读、幻读和不可重复读
ACID,是指数据库管理系统(DBMS)在写入或更新的过程中,为保证事务(transaction)是正确可靠的,所必须具备的四个特性:原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability)
184 0
MySQL事务的隔离级别以及脏读、幻读和不可重复读
|
缓存 关系型数据库 MySQL
MySQL中脏读、不可重复读、幻读
简单聊聊mysql的脏读、不可重复读、幻读
222 0
|
SQL 关系型数据库 MySQL
MySQL到底在RR层面解决幻读了吗?
hi,好久不见。 最近工作上有一些变动,文章很少更新。不过平时还是有收集一些文章idea,后面有空会慢慢写~
1375 0

推荐镜像

更多