继续昨天的innodb锁的分析:

  注:此博文参考一下地址,那里讲的也很详细。http://xm-king.iteye.com/blog/770721

  mysql事务的隔离级别分为四种,隔离级别越高,数据安全性越高但是效率越低。

  1. Read umcommitted(读未提交):

  在该隔离级别内,可以看到其他事务未提交的最新数据。此隔离级别一般并未使用,因为该隔离级别安全要求太低,但效率并未有很大的提高。

  容易出现的问题是脏读,具体场景如下:

  tx1 tx2
step1 select name from table1 where id=1(res:0)  
step2   update table1 set name=‘1’ where id=1
3 select name from table1 where id=1(res:1)  
4   rollback;

  说明:在事务一内读到了事务2为提交的数据,但是事务2在提交的时候出现问题,事务回滚;此时事务一仍以事务2未提交成功的数据做处理,就会出现问题,这就是脏读。

  2. Read committed(读已提交)

  在该隔离级别内,事务看不到其他事务已经提交的数据,只能看到其他事务已提交的数据。此隔离级别是数据库的默认隔离级别。

  容易出现的问题是不可重复读,具体场景如下

 

tx1

tx2

step1

select name from table1 where id=1(res:0)

 

step2

 

update table1 set name=‘1’ where id=1

3

 

commit

4

select name from table1 where id=1(res:1)

 

  说明:在事物一的两次查询过程中,由于事务二更新了数据,导致事物一两次查询到的数据不一致。

  3. Repeatable Read(可重复读)

  此隔离级别可以有效的解决不可重复读的问题,但是会出现以下的问题,幻读,示例如下:

 

tx1

tx2

step1

select id from table1 where id<4(res:1,2)

 

step2

 

insert into table1 (name,id) values (‘name1’,3)

3

 

commit

4

select id from table1 where id<4(res:1,2,3)

 

  在读一定范围内的数据的时候,新插入一条数据,导致两次查到的数据不一致,感觉像是幻影一样,解决方案(粘贴别处的):InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了该问题

  4:Serializable(可序列化)

  这个是最高的隔离级别,慎用,强行将事务进行排序,使之不会相互冲突,从而解决幻读问题。也就是说,此隔离级别会在查询上强制加一个读锁,在这个级别,可能导致大量的超时现象和锁竞争。

  总结(很重要):之前我一直搞不明白读已提交和可重复读两个级别所出现的不可重复度和幻读有什么不同,在冥思苦想和询问同事后终于搞明白了,读已提交级别出现的不可重复读问题,主要指在事务二有update的时候,可重复度解决了以上问题,但是会出现在insert的时候出现幻读。也就是说,不可重复读是update时出现的问题,幻读是insert时出现的问题

  

  

mysql innodb锁简析(2)的更多相关文章

  1. mysql innodb锁简析(1)

    说好的每天一个技术博客,选了iteye,但是,那个界面真的好丑啊,丑的让我都没写下去的欲望了,所以,还是转移到博客园里面吧,虽然这里也是很丑的! 直接步入正题: 1. 数据库锁包括:读锁(可共享锁)和 ...

  2. mysql: 关于MySQL InnoDB锁行还是锁表?

          baidu zone - 关于MYSQL Innodb 锁行还是锁表,深入讲解

  3. [转]关于MYSQL Innodb 锁行还是锁表

    关于mysql的锁行还是锁表,这个问题,今天算是有了一点头绪,mysql 中 innodb是锁行的,但是项目中居然出现了死锁,锁表的情况.为什么呢?先看一下这篇文章. 目时由于业务逻辑的需要,必须对数 ...

  4. MySQL InnoDB锁机制

    概述: 锁机制在程序中是最常用的机制之一,当一个程序需要多线程并行访问同一资源时,为了避免一致性问题,通常采用锁机制来处理.在数据库的操作中也有相同的问题,当两个线程同时对一条数据进行操作,为了保证数 ...

  5. mysql InnoDB锁等待的查看及分析

    说明:前面已经了解了InnoDB关于在出现锁等待的时候,会根据参数innodb_lock_wait_timeout的配置,判断是否需要进行timeout的操作,本文档介绍在出现锁等待时候的查看及分析处 ...

  6. RDS MySQL InnoDB 锁等待和锁等待超时的处理

    https://help.aliyun.com/knowledge_detail/41705.html 1. Innodb 引擎表行锁等待和等待超时发生的场景 2.Innodb 引擎行锁等待情况的处理 ...

  7. MySQL InnoDB锁机制之Gap Lock、Next-Key Lock、Record Lock解析

    MySQL InnoDB支持三种行锁定方式: l   行锁(Record Lock):锁直接加在索引记录上面,锁住的是key. l   间隙锁(Gap Lock):锁定索引记录间隙,确保索引记录的间隙 ...

  8. 你需要知道的MySQL&InnoDB锁都在这里

    目录 一.前言 二.锁的类型 2.1 全局锁 2.2 表级锁 2.2.1 表锁 2.2.2 元数据锁(Meta Data Locks) 2.2.3 自增列锁(AUTO-INC Locks) 2.2.4 ...

  9. mysql——InnoDB 锁

    https://www.cnblogs.com/leedaily/p/8378779.html 1.InnoDB锁的实现方式:给索引项加锁,只有通过索引条件检索数据,InnoDB才使用行级锁,否则,I ...

随机推荐

  1. __stdcall 与 __cdecl

    (1) _stdcall调用 _stdcall是Pascal程序的缺省调用方式,参数采用从右到左的压栈方式,被调函数自身在返回前清空堆栈. WIN32 Api都采用_stdcall调用方式,这样的宏定 ...

  2. ARP欺骗与中间人攻击

    前言: 上一篇WPA/WAP2wifi 密码破解笔记说到如何探测附近开放的AP并且破解进入,那么进入别人据局域网我们能干些什么呢?换句话说如果别人进入了我们内部网络,会有什么影响?本文简要介绍了ARP ...

  3. 网络打洞(P2P软件穿透内网进行通信) 原理

    http://www.cnblogs.com/gansc23/archive/2010/10/20/1857066.html 首先先介绍一些基本概念:NAT(Network Address Trans ...

  4. Zabbix简介(第一章第一节)

    Alexei Vladishev创建了Zabbix项目,当前处于活跃开发状态,Zabbix SIA提供支持. Zabbix是一个企业级的.开源的.分布式的监控套件 Zabbix可以监控网络和服务的监控 ...

  5. WordPress主题制作教程8:自定义page模版

    创建新文件,头部注释 <?php /* Template Name: 新的page模版 */ ?> 在页面编辑右栏体现:

  6. iOS 安装使用cocoapods

    一.什么是CocoaPods 1.为什么需要CocoaPods 在进行iOS开发的时候,总免不了使用第三方的开源库,比如SBJson.AFNetworking.Reachability等等.使用这些库 ...

  7. Echarts事件

    Echart饼图.柱状图.折线图(pie.bar.line)添加点击事件发布日期:2014年08月10日   来源:PHP1.CN     点击:250638摘要:var myChart= echar ...

  8. 在db2中 两个数据库之间的两个表的联合查询

    大家好,今天遇到了在db2中 两个数据库之间的两个表的联合查询 我知道oracle中有dblink,可是不知到db2的两个数据库联合查询怎么处理我找了类似于比如两个数据库: db1,db2用户名密码s ...

  9. 如何在Java客户端调用RESTful服务

    在这个例子中,我们将看到如何使用java.net包实用工具,创建一个访问REST服务RESTful的客户端.当然这不是创建一个RESTful客户端最简单的方法,因为你必须自己读取服务器端的响应,以及J ...

  10. 273. Integer to English Words

    题目: Convert a non-negative integer to its english words representation. Given input is guaranteed to ...