RR模式下利用区间锁防止幻读,RC模式没有区间锁会出现幻读
Session 1:
mysql> start transaction;
Query OK, 0 rows affected (0.00 sec) mysql> select * from SmsTest where phoneNo between 30 and 40 for update;
+----+---------+-------------+--------+
| sn | phoneNo | channelType | status |
+----+---------+-------------+--------+
| 30 | 30 | 2 | 1 |
| 31 | 31 | 2 | 1 |
| 32 | 32 | 2 | 1 |
| 33 | 33 | 2 | 1 |
| 34 | 34 | 2 | 1 |
| 35 | 35 | 2 | 1 |
| 36 | 36 | 2 | 1 |
| 37 | 37 | 2 | 1 |
| 38 | 38 | 2 | 1 |
| 39 | 39 | 2 | 1 |
| 40 | 40 | 2 | 1 |
+----+---------+-------------+--------+
11 rows in set (0.00 sec) mysql> explain select * from SmsTest where phoneNo between 30 and 40 for update;
+----+-------------+---------+-------+---------------+--------------+---------+------+------+-----------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------+-------+---------------+--------------+---------+------+------+-----------------------+
| 1 | SIMPLE | SmsTest | range | SmsTest_idx1 | SmsTest_idx1 | 4 | NULL | 11 | Using index condition |
+----+-------------+---------+-------+---------------+--------------+---------+------+------+-----------------------+
1 row in set (0.00 sec) Session 2: mysql> insert into zjzc.SmsTest(PhoneNo,channelType,status) values(28,1,1);
Query OK, 1 row affected (0.00 sec) mysql> insert into zjzc.SmsTest(PhoneNo,channelType,status) values(29,1,1); --hang mysql> insert into zjzc.SmsTest(PhoneNo,channelType,status) values(30,1,1); --hang mysql> insert into zjzc.SmsTest(PhoneNo,channelType,status) values(31,1,1); --hang mysql> insert into zjzc.SmsTest(PhoneNo,channelType,status) values(32,1,1); --hang mysql> insert into zjzc.SmsTest(PhoneNo,channelType,status) values(33,1,1); --hang mysql> insert into zjzc.SmsTest(PhoneNo,channelType,status) values(34,1,1);--hang mysql> insert into zjzc.SmsTest(PhoneNo,channelType,status) values(40,1,1); --hang mysql> insert into zjzc.SmsTest(PhoneNo,channelType,status) values(41,1,1);
Query OK, 1 row affected (0.01 sec) mysql> insert into zjzc.SmsTest(PhoneNo,channelType,status) values(42,1,1);
Query OK, 1 row affected (0.04 sec) 在30-40这个区间无法插入,RR需要区间锁来防止幻读 修改事务隔离为transaction-isolation =READ-COMMITTED mysql> select @@tx_isolation;
+----------------+
| @@tx_isolation |
+----------------+
| READ-COMMITTED |
+----------------+
1 row in set (0.00 sec) mysql> start transaction;
Query OK, 0 rows affected (0.00 sec) mysql> select * from SmsTest where phoneNo between 30 and 40 for update;
+----+---------+-------------+--------+
| sn | phoneNo | channelType | status |
+----+---------+-------------+--------+
| 30 | 30 | 2 | 1 |
| 31 | 31 | 2 | 1 |
| 32 | 32 | 2 | 1 |
| 33 | 33 | 2 | 1 |
| 34 | 34 | 2 | 1 |
| 35 | 35 | 2 | 1 |
| 36 | 36 | 2 | 1 |
| 37 | 37 | 2 | 1 |
| 38 | 38 | 2 | 1 |
| 39 | 39 | 2 | 1 |
| 40 | 40 | 2 | 1 |
+----+---------+-------------+--------+
11 rows in set (0.01 sec) mysql> explain select * from SmsTest where phoneNo between 30 and 40 for update;
+----+-------------+---------+-------+---------------+--------------+---------+------+------+-----------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------+-------+---------------+--------------+---------+------+------+-----------------------+
| 1 | SIMPLE | SmsTest | range | SmsTest_idx1 | SmsTest_idx1 | 4 | NULL | 11 | Using index condition |
+----+-------------+---------+-------+---------------+--------------+---------+------+------+-----------------------+
1 row in set (0.01 sec) Session2: Database changed
mysql> start transaction;
Query OK, 0 rows affected (0.00 sec) mysql> insert into zjzc.SmsTest(PhoneNo,channelType,status) values(28,1,1);
Query OK, 1 row affected (0.00 sec) mysql> insert into zjzc.SmsTest(PhoneNo,channelType,status) values(29,1,1);
Query OK, 1 row affected (0.00 sec) mysql> insert into zjzc.SmsTest(PhoneNo,channelType,status) values(30,1,1);
Query OK, 1 row affected (0.00 sec) mysql> commit;
Query OK, 0 rows affected (0.00 sec) mysql> insert into zjzc.SmsTest(PhoneNo,channelType,status) values(31,1,1);
Query OK, 1 row affected (0.00 sec) Session 1: mysql> select * from SmsTest where phoneNo between 30 and 40 for update;
+-------+---------+-------------+--------+
| sn | phoneNo | channelType | status |
+-------+---------+-------------+--------+
| 30 | 30 | 2 | 1 |
| 45292 | 30 | 1 | 1 |
| 31 | 31 | 2 | 1 |
| 32 | 32 | 2 | 1 |
| 33 | 33 | 2 | 1 |
| 34 | 34 | 2 | 1 |
| 35 | 35 | 2 | 1 |
| 36 | 36 | 2 | 1 |
| 37 | 37 | 2 | 1 |
| 38 | 38 | 2 | 1 |
| 39 | 39 | 2 | 1 |
| 40 | 40 | 2 | 1 |
+-------+---------+-------------+--------+
12 rows in set (0.00 sec) mysql> select * from SmsTest where phoneNo between 30 and 40 for update;
+-------+---------+-------------+--------+
| sn | phoneNo | channelType | status |
+-------+---------+-------------+--------+
| 30 | 30 | 2 | 1 |
| 45292 | 30 | 1 | 1 |
| 31 | 31 | 2 | 1 |
| 45293 | 31 | 1 | 1 |
| 32 | 32 | 2 | 1 |
| 33 | 33 | 2 | 1 |
| 34 | 34 | 2 | 1 |
| 35 | 35 | 2 | 1 |
| 36 | 36 | 2 | 1 |
| 37 | 37 | 2 | 1 |
| 38 | 38 | 2 | 1 |
| 39 | 39 | 2 | 1 |
| 40 | 40 | 2 | 1 |
+-------+---------+-------------+--------+
13 rows in set (0.01 sec) 结论 RR模式下 需要区间锁来防止幻读, RC模式下,没有区间锁,会出现幻读
RR模式下利用区间锁防止幻读,RC模式没有区间锁会出现幻读的更多相关文章
- x86架构:保护模式下利用中断实现抢占式多任务运行
站在用户角度考虑,一个合格的操作系统即使在单核下也能 "同时" 执行多个任务,这就要求CPU以非常快的频率在不同任务之间切换,让普通人根本感觉不到任务的切换.windwo ...
- Myeclipse在debug模式下没加断点程序卡住,start模式下可以正常启动
参考<eclipse在debug模式下卡住,start模式下可以启动>,地址:https://blog.csdn.net/jack_chen1994/article/details/761 ...
- 使用eclipse启动tomcat,正常模式下可以启动tomcat,却在debug模式下无法启动tomcat 问题解决
这个问题可能是由于eclipse和tomcat的交互而产生的,在以debug模式启动tomcat时,发生了读取文件错误,eclipse自动设置了断点,导致tomcat不能正常启动. 解决方法把brea ...
- 16位模式/32位模式下PUSH指令探究——《x86汇编语言:从实模式到保护模式》读书笔记16
一.Intel 32 位处理器的工作模式 如上图所示,Intel 32 位处理器有3种工作模式. (1)实模式:工作方式相当于一个8086 (2)保护模式:提供支持多任务环境的工作方式,建立保护机制 ...
- 用VMWare搭建服务器集群不能上外网的三种模式下对应解决办法
前言 决心要花费宝贵时间写下这篇心得,是因为从昨天晚上到今天上午被这个VMWare模拟搭建的服务器集群不能上外网的问题搞得很心烦,最后决定跟它杠上了!上午还通过远程连接得到了“空白”同学的帮助,在此表 ...
- MVVM模式下弹出窗体
原地址:http://www.cnblogs.com/yk250/p/5773425.html 在mvvm模式下弹出窗体,有使用接口模式传入参数new一个对象的,还有的是继承于一个window,然后在 ...
- CFUpdate高速模式下出现Error #2038提示的解决方案
使用CFUpdate上传文件,在IE模式下是正常的,切换到高速模式下出现提示Error #2038错误,文件无法上传. 向作者了解到需要设置challs_flash_update函数中的a.url为绝 ...
- sql server 备份与恢复系列五 完整模式下的备份与还原
一.概述 前面介绍了简单恢复模式和大容量恢复模式,这篇继续写完整恢复模式下的备份与还原.在完整恢复模式里最大的优点是只要能成功备份尾日志,就可以还原到日志备份内包含的任何时点("时点恢复&q ...
- eclipse的debug模式下启动不了tomcat
使用eclipse启动tomcat,正常模式下可以启动tomcat,却在debug模式下无法启动tomcat. 这个问题可能是由于eclipse和tomcat的交互而产生的,在以debug模式启动to ...
随机推荐
- dump_stack的简单使用 +CALL TREE
http://blog.chinaunix.net/uid-26403844-id-3361770.html http://blog.csdn.net/zifeng274059226/article/ ...
- Java基础知识强化之集合框架笔记15:List集合的特点
1. List集合的特点 List本身也是一个接口,如下: public interface List<E> extends Collection<E> (1)List是有序的 ...
- 开始android博客分享
现在开始写博客,分享android开发中的心得.
- asp.net利用ajax和jquery-ui实现进度条
前台用ajax不停进行查询,直到任务完成.进度条用的是jquery-ui.后台用一般处理程序处理相应,进度信息保存在HttpContext.Application中. 代码作为简单示例,实际应用时应对 ...
- 游标中的static参数
以下测试用例将演示,使用static的游标和不使用的区别: if object_id(N't_test',N'u') is not null drop table t_test go create t ...
- ssh配置事务
http://blog.csdn.net/jianxin1009/article/details/9202907(不错)
- 【转】iOS开发网络篇—发送json数据给服务器以及多值参数
原文: http://www.cnblogs.com/wendingding/p/3950132.html 一.发送JSON数据给服务器 发送JSON数据给服务器的步骤: (1)一定要使用POST请求 ...
- Cocos2dx开发(1)——Win8.1下 NDK r10 环境搭建
内容简要:仅讲述NDK在Windows环境下搭建方法,至于NDK何物一概不属于本文内容,老鸟或已有环境的跳过. 笔者已安装的环境: vs2013企业版.谷歌官网adt 22.3.0(推荐)省得自己ec ...
- Extjs4 关于Store的一些操作(转)
1.关于加载和回调的问题 ExtJs的Store在加载时候一般是延迟加载的,这时候Grid就会先出现一片空白,等加载完成后才出现数据:因此,我们需要给它添加一个提示信息! 但是Store却没有wait ...
- spring + maven +testng 测试常见依赖包问题
java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource解决方法:添加缺少的jar包:commons-coll ...