【MySQL】可重复读下的幻读

【背景】
在研究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 已经解决了幻读问题。对于本实验如有不妥,望各位看官不吝赐教。
【参考】

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22664653/viewspace-750795/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/22664653/viewspace-750795/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值