CREATE TABLE `kk` (
`a` int() NOT NULL,
`b` int() NOT NULL,
`c` int() NOT NULL,
PRIMARY KEY (`a`),
UNIQUE KEY `bb` (`b`),
KEY `cc` (`c`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
mysql> select * from kk;
+---+----+----+
| a | b | c |
+---+----+----+
| | | |
| | | |
| | | |
| | | |
| | | |
+---+----+----+
rows in set (0.16 sec)

铺助索引                                                           主健

a=5                                                                                                           recordlock[5]

a<5                                                                                                                      next_keylock[1,3,5]

a<=5                                                                                                                    next_keylock[1,3,5,7]

a>5                                                                                                                      next_keylock[7,9,sup]

a>=5                                                                                                                    next_keylock[5,7,9,sup]

b=15                                                 recordlock[5]                                                recordlock[5]

b<15                                                 next_keylock[10,13,15]                                 recordlock[1,5]

b<=15                                               next_keylock[10,13,15,17]                            recordlock[1,3,5]

b>15                                                 next_keylock[17,19,sup]                               recordlock[17,19]

c=25                                                 next_keylock[25] ,caplock[27]                       recordlock[25]

c<25                                                 next_keylock[20,23,25]                                recordlock[20,23]

c<=25                                               next_keylock[20,23,25,27]                           recordlock[20,23,25]

c>25                                                 next_keylock[27,29,sup]                              recordlock[27,29]

rr级别:  解决不可重复读,幻读

set tx_isolation="REPEATABLE-READ"

select * from kk where   a   ...      for update

select * from kk where   b   ...       for update

select * from kk where   c   ...       for update

RR:对打开的游标都需要加锁,直到不满足条件那条记录

RC:只对满足条件的记录加锁

RR:

NEXT-KEY-LOCK-------唯一等值查询---- 转换为RECORD LOCK

select * from kk force index(primary) where a..       for update;   防数据量小,走全表,不走索引,会全表锁

单个事务插入一条记录,不对该条记录的下一条记录加插入意向锁

如果要插入记录的位置的下一条记录有CAP LOCK | NEX-KEY LOCK,就会在该记录加上插入意向锁,等待插入,如果下一条记录是RECORD LOCK,就直接插入

mysql 锁 实验的更多相关文章

  1. Mysql学习笔记-临键锁实验

    前言 昨天同事跟我聊到一个问题:InnoDB里面间隙锁锁住的数据可以update么?我们经常都说间隙锁是InnoDB在RR隔离级别下防止幻读的一种处理手段.它可以防止数据在间隙范围中insert数据, ...

  2. [MySQL] 锁/死锁问题一例

    MySQL锁/死锁问题 在MySQL中, 不同事务隔离级别下, 锁的情况表现是不同的, 另外表的设计上有无索引也是一个因素. 做一个小的实验测试InnoDB锁表现 -:) 说明 事务隔离级别 READ ...

  3. MySQL 锁(完整版)

    目录 锁总览 锁的作用 加锁流程 锁对数据库的影响 锁等待 死锁 锁类型 锁范围 锁方式 全局锁 全局读锁 全局QC锁 QC锁存在的问题: 备份锁 backup lock MDL锁 MDL锁类型 MD ...

  4. mysql锁

    锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的计算资源(如CPU.RAM.I/O等)的争用以外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性.有效性是所有数 ...

  5. Mysql锁初步

    存储引擎 要了解mysql的锁,就要先从存储引擎说起. 常用存储引擎列表如下图所示: 最常使用的两种存储引擎: Myisam是Mysql的默认存储引擎.当create创建新表时,未指定新表的存储引擎时 ...

  6. mysql锁表机制及相关优化

    (该文章为方便自己查阅,也希望对大家有所帮助,转载于互联网) 1. 锁机制 当前MySQL支持 ISAM, MyISAM, MEMORY (HEAP) 类型表的表级锁,BDB 表支持页级锁,InnoD ...

  7. MySQL锁系列3 MDL锁

    http://www.cnblogs.com/xpchild/p/3790139.html   MySQL为了保护数据字典元数据,使用了metadata lock,即MDL锁,保证在并发的情况下,结构 ...

  8. 01 MySQL锁概述

    锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的计算资源(如CPU.RAM.I/O 等)的争用以外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性.有效性是所有 ...

  9. Mysql锁机制介绍

    Mysql锁机制介绍 一.概况MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制.比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking ...

随机推荐

  1. 【python之旅】python的模块

    一.定义模块: 模块:用来从逻辑上组织python代码(变量.函数.类.逻辑:实现一个功能),本质就是以.py结尾的python文件(文件名:test.py ,对应的模块名就是test) 包:用来从逻 ...

  2. 虚拟机linux下使用cuteftp

    操作系统  redhat9.0 一.主机配置 1.查看主机是否安装了ftp服务器,如果没有,安装它 在终端上输入setup,在弹出的界面中选择system services.查看弹出的界面中是否有vs ...

  3. iOS:处理XML文件

    NSXMLParser是标准库类 Book.xml <?xml version="1.0" encoding="UTF-8"?> <!--Do ...

  4. redis问题解决

    一, redis的奇葩问题:我使用命令 redis-cli shutdown 关闭redis之后就再也灭洋启动了! 尝试1: 使用命令 sudo /etc/init.d/redis-server st ...

  5. bzoj 2049: [Sdoi2008]Cave 洞穴勘测 动态树

    2049: [Sdoi2008]Cave 洞穴勘测 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 3119  Solved: 1399[Submit] ...

  6. onchange事件

    一.onchange 一般input type text的onchange事件的触发需要两个条件:1.输入框的值发生了改变:2.该文本框失去了焦点,而真正的事件的触发却是发生在该文本框失去焦点的时候, ...

  7. 客户端(C#)调用CXF搭建的webservice的出现一些问题记录

    最近把XFire框架搭建的一个webservice换成CXF框架.访问webservice的客户端是C#写的.客户端调用webservice,数据能在客户端得到.看起来显然是成功了. 但其中在VS中添 ...

  8. Delphi 在任务栏隐藏程序图标

    Delphi 在任务栏隐藏程序图标 方法一:1.修改工程文件中的“Application.MainFormOnTaskbar := True;”为“Application.MainFormOnTask ...

  9. Guava的一些总结

    guava是java API蛋糕上的冰激凌(精华). 源码包的简单说明:  com.google.common.annotations:普通注解类型.  com.google.common.base: ...

  10. java多线程 ReentrantLock

    本章对ReentrantLock包进行基本介绍,这一章主要对ReentrantLock进行概括性的介绍,内容包括:ReentrantLock介绍ReentrantLock函数列表ReentrantLo ...