MySQL RR隔离级别的更新冲突策略
对于事务的隔离级别,MySQL中默认是RR, Oracle中默认是RC,两个事务隔离级别存在着很大的差别,而换句话说,就算是RR的事务隔离级别级别,同是关系型数据库MySQL,SQLServer,postgreSQL也会有一些差别。所以隔离级别的部分还是值得花一些时间来总结一下。
之前看到过丁奇大师的一篇文章,是分析InnoDB的在隔离级别RR下的一个“诡异”现象。读来受益匪浅,丁大师不光明理而且还能改动代码解决问题,实在佩服,我在自己的环境中也做了一些简单的测试和分析。
首先是初始化基础数据,我们开启两个窗口,创建一个测试表,插入两条记录。
create table t (id int not null, name varchar(10) ) engine=innodb ;
insert into t values(1,'name1'),(3,'name3');
整个过程虽然是两个窗口,但是操作是一个串行的过程。
首先看下RR本身的现象,会话1开启一个事务,会话2插入一条记录,在会话1中查询应该还是2条数据。
#会话 1
> begin;
Query OK, 0 rows affected (0.00 sec)
开启事务后,查询当前的数据情况。
> select *from t;
+----+-------+
| id | name |
+----+-------+
| 1 | name1 |
| 3 | name3 |
+----+-------+
2 rows in set (0.00 sec)
会话 2:
会话2插入一条记录,默认提交。
> insert into t values(4,'name4');
Query OK, 1 row affected (0.00 sec)
这个过程中,如果在会话1中查看数据,应该还是2条,这也是RR本身对的含义。
会话 1:
> select *from t;
+----+-------+
| id | name |
+----+-------+
| 1 | name1 |
| 3 | name3 |
+----+-------+
2 rows in set (0.00 sec)
我们继续做一个update, id=4的记录是刚刚在会话2中插入的,在此处变更,从结果来看还是产生了一行数据的变化,这是一个“诡异”的地方。
> Update t set name= 'name_test' where id = 4;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
而接下来的地方就是问题的关键了,我们再次查询就输出了3行记录,原来id=4,name='name4'的记录在会话1里面被修改成了id=4,name='name_test'
> select *from t;
+----+-----------+
| id | name |
+----+-----------+
| 1 | name1 |
| 3 | name3 |
| 4 | name_test |
+----+-----------+
3 rows in set (0.00 sec)
这个时候如果查看会话2的数据情况,得到的结果还是相对合理的。
会话 2:
mysql> select *from t;
+----+-------+
| id | name |
+----+-------+
| 1 | name1 |
| 3 | name3 |
| 4 | name4 |
+----+-------+
3 rows in set (0.00 sec)
所以这就是更新冲突的策略了,目前的MySQL在RR隔离级别下的实现是这样。而按照我们预期的要求,应该在会话1的事务内是对会话2的变更不可见的。
这一点上,在5.7中的结果也是如此,在5.1的版本中的update的输出效果会有一些差别。
而关于这部分的代码及修改可以参见
http://dinglin.iteye.com/blog/804655
相关文章:

c语言选择题库和解系,OC单个对象归档和解档关键类和方法名
// 文件归档(一)//需要参数(归档对象、归档路径)//参数设置NSArray *array[ "hello","world",{"name":"Maky"},45];NSString *path[NSHomeDirectory() stringByAppendingPathComponent:"Desktop/test/test.plist"];//归档过…

DIV布局SEO的影响
代码精简使用DIVCSS布局,页面代码精简,这一点相信对XHTML有所了解的都知道。代码精简所带来的直接好处有两点:一 是提高spider爬行效率,能在最短的时间内爬完整个页面,这样对收录质量有一定好处;二是由于能高效的爬行&…

Linux 基础学习
Linux简单命令转载于:https://blog.51cto.com/moriwendu/1947863
【怎样写代码】偷窥高手 -- 反射技术(二):窥视内部
如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

怎样用c语言解一元一次方程,问一道算法题目(解一元一次方程的问题)
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include#includevoid fun(char *a,int left ,int right , int *b ,int *c) // int fun(字符数组 上界 下界 常数 系数){int f; // 符号位int sum ; //数字位int i; // 循环变量f1;sum0;for (ileft; i< right ; i){ if(a[i] -)…

shiro整合oauth
前言 如果oauth原理还不清楚的地方,其参考这里。 一、基本思路脑图 二、客户端shiro配置 shiro配置文件 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:util&q…
2010年的退休畅想
有了确定的目标应该是终究可以实现的,比如新买的房子,每一次路过那个地方都要心里暗暗向往,闹市中还能这么安静的地方,托人也买不到的地方,以为注定与我无缘,金融危机让大家都平等了,于是拥有了…
【怎样写代码】偷窥高手 -- 反射技术(三):深入窥视字段
如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

android studio 库项目管理,在Android Studio中将现有项目转换为库项目
在模块的applicationId文件中(如果使用模块,则不是根项目!),只需替换:apply plugin: com.android.application// or, if youre on an old versionapply plugin: android // note: this one is deprecated...具有:apply…

WSDL、SOAP、UDDI
纵观计算机和软件领域,我们不难了解为什么会产生Web服务。在因特网上有许多系统和平台,在这些系统和平台上又有更多的应用程序。说得更明白些就是,存在着许多技术,把客户端连接到服务器,这其中包括DCOM、CORBA和其它各…

实战证明LINUX系统下密钥对验证的安全性
实战证明LINUX系统下密钥对验证的安全性 密钥对验证:要求提供匹配的密钥信息才能通过验证,首先在客户端创建一对密钥文件(公钥、私钥),后把公钥文件放到需要远程连接的服务器中。远程登录时,系统将使用私钥…
【怎样写代码】偷窥高手 -- 反射技术(四):深入窥视属性
如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

百度android 测试平台,集成百度活体检测(Android、iOS)
更新记录1.1.0(2020-06-18)插件增加iOS版本1.0.2(2020-06-08)优化插件打包无法使用的问题插件调用方法添加sound字段,表示是否开启声音,true为开启,默认false查看更多平台兼容性AndroidiOS适用版本区间:4.4 - 9.0 支持CPU类型&…

ubuntukylin-14.04.2-desktop-amd64中python2.7版本安装机器学习库
为什么80%的码农都做不了架构师?>>> 本文永久地址:https://my.oschina.net/bysu/blog/1456737 1.如果需要设置代理才能上网,那么先设置代理。 摘自:http://www.cnblogs.com/foonsun/p/5781767.html ubuntu 全局代理&a…
【怎样写代码】偷窥高手 -- 反射技术(五):深入窥视方法
如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

android 系统锁屏音乐播放器,Android实现音乐播放器锁屏页
本文实例为大家分享了Android音乐播放器锁屏页的具体代码,供大家参考,具体内容如下首页我们先看一下效果图下边来说一下实现逻辑,其主要思路就是新建一个activity使其覆盖在锁屏页上边。一、我们新建一个LockActivty,既然是四大组…

GridView标题行换行之我见 (转)
GridView标题行换行之我见 (转) 1、不换行:word-break:keep-all;word-wrap:normal2、换行:word-break:break-all;word-wrap:break-word以上的换行只支持英文,当标题中包含有中文时并不好用。3、如果标题中含有中文的,只能在GridVi…
【怎样写代码】偷窥高手 -- 反射技术(六):深入窥视DLL内部
如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.
GIS+=地理信息+云计算技术——Spark集群部署
第一步:安装软件 Spark 1.5.4:wget http://www.apache.org/dyn/closer.lua/spark/spark-1.5.2/spark-1.5.2-bin-hadoop2.6.tgzHadoop 2.6.3:wget http://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.6.3/hadoop-2.6.3.tar.gzscala :apt-get inst…

android上传图片崩溃,导致安卓手机死机的照片拍摄者表示这张照片是无意之举...
原标题:导致安卓手机死机的照片拍摄者表示这张照片是无意之举上周,我们报道了在一些安卓手机上将某张图片设置为壁纸会导致手机崩溃,并卡在一个开启和关闭显示屏的循环中,让用户无法进行锁屏。它影响了大多数Android手机ÿ…

判断页面元素存在与否
在传统的Javascript里,当我们对某个页面元素进行某种操作前,最好先判断这个元素是否存在。原因是对一个不存在的元素进行操作是不允许的。例如:document.getElementById("someID").innerText("hi");如果ID为"someID…

Java系列 – 用Java8新特性进行Java开发太爽了(续)
本人博客文章网址:https://www.peretang.com/using-java8s-new-features-to-coding-is-awesome-2/前言上周, 我们谈论了关于Java8的新特性有那些, 什么是函数式编程, 什么是Lambda表达式, 这周让我们继续谈论这些新特性.本周, 我们会聊一下什么是Stream API, 以及什么是Optiona…
【怎样写代码】偷窥高手 -- 反射技术(七):通过反射实例化对象
如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

腾讯全力支持鸿蒙,腾讯宣布大力发展车联网,或与华为鸿蒙强强联合!
原标题:腾讯宣布大力发展车联网,或与华为鸿蒙强强联合!一场全球级别的科技风暴已然拉开序幕,互联网、通讯系统、云计算、智能家居、汽车……万物即将联为一体。按理来说这是互联网巨头大展拳脚的好机会,但身为国内互联…

CreateFileMapping
CreateFileMapping VB声明 Declare Function CreateFileMapping Lib "kernel32" Alias "CreateFileMappingA" (ByVal hFile As Long, lpFileMappigAttributes As SECURITY_ATTRIBUTES, ByVal flProtect As Long, ByVal dwMaximumSizeHigh As Long, ByVal…

java file 操作之创建、删除文件及文件夹
本文章向大家讲解java文件的基本操作,包括java创建文件和文件夹、java删除文件、java获取指定目录的全部文件、java判断指定路径是否为目录以及java搜索指定目录的全部内容等。请看下面实例。 创建文件File 的两个常量(File.separator、File.pathSeparat…
【怎样写代码】小技巧 -- .NET配置文件详解
如果喜欢这里的内容,你能够给我最大的帮助就是转发,告诉你的朋友,鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.
html树状结构怎么展开,纯css实现树形结构
纯css实现属性结构**css实现属性结构的思路是利用伪类实现树形结构连接线,如果想实现点击展开和收缩以及复选框效果还得配合js来实现。其实展开和收缩就是一个点击元素其子元素隐藏和显示的切换。**效果图html结构1级菜单2级菜单2级菜单3级菜单3级菜单1级菜单2级菜单…

.net获取ip地址
/// 获得客户端IP /// /// <returns></returns> private string getIp() { // 穿过代理服务器取远程用户真实IP地址 string Ip string.Empty; if (Request.ServerVariables["HTTP_VIA"] ! null) { …

Pascal 错误代码及含义
DOS 错误代码:1无效DoS功能号 2文件末找到 3路径未找到 4打开文件过多 5禁止文件存取 6无效文件句柄 12无效文件存取代码 15无效驱动器号 16不能删除当前日录 17不能跨驱动器改文件名 I/O错误 100磁盘读错误 101磁盘写错误 102文件变量未赋值 103文件未打开 104文件…