看过很多innodb锁的文章,已经明白的就不写了,简单做个笔记
 
Innodb 锁的兼容性:
1、意向锁和意向锁之间都是兼容的
2、X(排他锁)与任何锁都是不兼容的
3、排他意向锁 IX 于S锁是不兼容的
4、剩下的锁都是兼容的
 
三种锁
record lock
gap lock
next-key lock = record + gap
 
判断锁一定要加上隔离级别,不同级别锁的情况不同
对于Innodb 一般只需要考虑RR 和 RC 隔离级别即可
 
RR 三种锁
RC 可以认为只有record锁,但是当表存在唯一索引的时候是存在间隙锁(gap lock)只有这一种特殊情况
 
 
显示锁 可以是S 或者 X锁
隐式锁只能是X锁
 
隐式锁的一种理解  begin insert into data  这时候如果没有提交事务,那么该记录应该是隐式锁,当你想要 select * from data for update 时候会锁等待,即等待这个隐式锁。
举例如下:
create table info ( id int primary key , name varchar(20)) engine = innodb;
session1                                                                            session 2
start transaction;                                                              
insert into info values (1,'name');         
                                                                                        select * from info where id = 1 for update;
                                                                                        session1 提交前都是等待隐式锁
commit;
 
隐式锁的个人理解就是某个激活的事务要更改一个索引值,这个值即将要改变,那么在另一个事务中要想以这个索引值为条件去更新数据,就需要等待,也就是要给这个被隐式锁锁住的索引加X锁,会LOCK_WAIT
 
 
书中有这么一段不是很理解:
 
  1. drop table if exists a ;
  2. create table a (
  3. a int primary key,
  4. b varchar(30)
  5. ) engine = innodb;
  6. insert into values (1,'a'),(2,'b'),(3,'c'),(4,'d');
两个会话事务:
  1. A
  2. begin;
  3. select * from a where a= 4 for update;
  4.  
  5. B:
  6. begin;
  7. select * from a where a <=2 lock in share mode;
  8. delete from a where a = 3;
  9. select * from a where a <=2 lock in share mode;
首先执行A,然后执行B中的前两句,当执行到B中第二个select的时候会发现锁等待了
 
书中解释:SELECT 游标锁定的最大记录被标记为操所是已经加锁成功的。其实导致这个现象的原因是SELECT游标锁定的最大记录被标记为了删除(未被真正PURGE删除),因此,当第二次再次执行select操作的时候,需要进一步锁定记录,也是a等于4的记录,而该记录已经在会话A中被锁定了。
 
不理解:
应该是A锁定a=4的记录,然后B的第一个select s锁锁定了a<=2的所有记录,delete 时候锁定了a=3的记录,但是delete的语句只是标记了a=3要删除,但是没有实际PURGE,第二个select 为什么要去锁定 a=4呢?
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Innodb 锁 (简单笔记)的更多相关文章

  1. InnoDB锁机制分析

    InnoDB锁机制常常困扰大家,不同的条件下往往表现出不同的锁竞争,在实际工作中经常要分析各种锁超时.死锁的问题.本文通过不同条件下的实验,利用InnoDB系统给出的各种信息,分析了锁的工作机制.通过 ...

  2. MySQL数据恢复和复制对InnoDB锁机制的影响

    MySQL通过BINLOG记录执行成功的INSERT,UPDATE,DELETE等DML语句.并由此实现数据库的恢复(point-in-time)和复制(其原理与恢复类似,通过复制和执行二进制日志使一 ...

  3. [转载] 数据库分析手记 —— InnoDB锁机制分析

    作者:倪煜 InnoDB锁机制常常困扰大家,不同的条件下往往表现出不同的锁竞争,在实际工作中经常要分析各种锁超时.死锁的问题.本文通过不同条件下的实验,利用InnoDB系统给出的各种信息,分析了锁的工 ...

  4. MySQL- InnoDB锁机制

    InnoDB与MyISAM的最大不同有两点:一是支持事务(TRANSACTION):二是采用了行级锁.行级锁与表级锁本来就有许多不同之处,另外,事务的引入也带来了一些新问题.下面我们先介绍一点背景知识 ...

  5. Android_简单笔记一

    入门学习Android的简单笔记(已经安装好了开发环境ADT) 一.关于 AndroidManifest.xml文件 1. android:icon和android:label定义了应用程序安装后显示 ...

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

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

  7. InnoDB锁问题

    InnoDB锁问题 InnoDB与MyISAM的最大不同有两点:一是支持事务(TRANSACTION):二是采用了行级锁.行级锁与表级锁本来就有许多不同之处,另外,事务的引入也带来了一些新问题.下面我 ...

  8. 【锁】Innodb锁

    InnoDB与MyISAM的最大不同有两点:一是支持事务(TRANSACTION):二是采用了行级锁.行级锁与表级锁本来就有许多不同之处,另外,事务的引入也带来了一些新问题.下面我们先介绍一点背景知识 ...

  9. 由innodb锁引起的数据库相关

    innodb 锁的问题 1.事务 原子性:要么成功,要么失败 一致性:前后数据保持一致状态 隔离性:多个事务并行,相互不影响 持久性:事务提交之后,对数据的影响是永久性的,即使故障也可以保持. 2.并 ...

随机推荐

  1. php 23种设计模式的趣味解释

    http://wenku.baidu.com/link?url=GwvuvSOdJneZQc-DSKoGmPcxTtzn3cdtIp3fRaCNbkg1zJDZZZTx2NwEK5IsqU996fG3 ...

  2. 安装universal-ctags

    universal-ctags是exuberant-ctags的替代者,相比gtags可以解析更多的语言,但是其他方面比如操作,数据库的组织方式等就不够好.需要自己编译安装 先用 git clone ...

  3. 音频(3)Android TTS技术支持朗读英文

    Android对TTS技术的支持 Android 1.6开始支持TTS(Text To Speech)技术,通过该技术可以将文本转换成语音.目前2015-09-06只支持朗读英文. TTS技术的核心是 ...

  4. 在XML里的XSD和DTD以及standalone的使用2----具体使用详解

    如何定义XSD并在XML中使用XSD 同时XSD可以对XML中的格式进行约束,当约束失败时给出提示. 下面以下使用VS2010为平台进行演示. 1.新建一个项目,然后在项目中添加xml架构文件(.xs ...

  5. VPN column: PPTP(2)--PPTP协议解析

    zhu_hit原创,如需转载请注明出处.Thanks. PPTP协议大体上可以分为两部分:控制层连接和隧道,下面简要介绍两部分的功能.如果要详细了解PPTP协议请阅读RFC文档. 一. Control ...

  6. IMX515开发备忘

    1.多个PAD可以选择为同样的功能引脚 IMX515处理器一个PAD可以作为多种功能引脚,比如EIM_D25可以作为UART3_RXD,定义如下: 图1 而处理还有一个另一个UART3_RXD的PAD ...

  7. Android开发之实用小知识点汇总-2

    1.EditText 中将光标移到文字末尾: EditText mEdit = (EditText)this.findViewById(R.id.EditText01); mEdit .setText ...

  8. 变量赋值(引用) php内核的实现(二)

    <?php $a=1; $b=&$a; $c=2; $a=&$c; echo $a."\n"; echo $b; 2 1 结论: 首先保存 左值的内存地址, ...

  9. UVa 1644 (筛素数 + 二分) Prime Gap

    题意: 给出一个整数n,如果n是素数输出0,否则输出它后一个素数与前一个素数的差值. 分析: 首先用筛法把前十万个素数都筛出来,然后放到数组里.用二分找到不大于n的最大的素数的下标,如果这个素数等于n ...

  10. hdu 2639 Bone Collector II

    Bone Collector II Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...