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中的mmap实现--转
什么是mmap mmap对于c程序员很熟悉,对于java程序员有点陌生.简而言之,将文件直接映射到用户态的内存地址,这样对文件的操作不再是write/read,而是直接对内存地址的操作. 在c中提供了 ...
- Java基础知识强化之集合框架笔记23:ArrayList的实现原理
1. ArrayList的实现原理: 这个可以直接参考网友的博客:http://www.cnblogs.com/ITtangtang/p/3948555.html
- ASP.NET MVC 第四回 向View传值
一.ViewData与TempData属性来向View页传递对象 上文中已经提到,使用ViewData可以将数据由Controller传递到View 在前文中我们建立了EiceController类 ...
- Axiom3D学习日记 3.Cameras, Lights, and Shadows
Camera 相机: 相机基础知识不写了,需要注意的是:axiom目前不支持同时操作多个相机. 创建,设置位置基本操作. _camera = _scene.CreateCamera("Mai ...
- WPF RichTextBox 如何滚动到光标所在位置、滚动条操作
1.获取当前滚动条位置 //获取当前滚动条位置 richTextBox.VerticalOffset; richTextBox.HorizontalOffset; //获取当前光标位置 richTex ...
- 【转】UILabel、UITextView自适应得到高度
原文:http://blog.csdn.net/xcysuccess3/article/details/8331549 在iOS中,经常遇到需要根据字符串的内容动态指定UILabel,UITextVi ...
- 文字排版--字号、颜色(font-size, color)
可以使用下面代码设置网页中文字的字号为12像素,并把字体颜色设置为#666(灰色): body{font-size:12px;color:#666} 示例: <!DOCTYPE HTML> ...
- group by应用
注意: having是对分组后的数据进行第二次筛选或者过滤,也就是说没有group by就没having where之后不能有聚合函数 查询每个年级的总学时数,并按照升序排列select GradeI ...
- php定时执行任务的几个方法
PHP的实现决定了它没有Java和.Net这种AppServer的概念, 而http协议是一个无状态的协议, php只能被用户触发, 被调用, 调用后会自动退出内存, 没有常驻内存, 就没有办法准确的 ...