间隙锁相关问题:
2015-08-11 16:58
239 查看
间隙锁相关问题:
#####################
测试数据:
CREATE TABLE `test` (
`a` int(11) NOT NULL,
PRIMARY KEY (`a`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
insert into test value(11) ;
insert into test value(14) ;
###########################################
1.什么是区间锁(gap)
gap会锁定某个区间,防止数据的插入,来避免幻影读。
2.什么是区间。
例如测试表中的数据11,14. 这些数据包括以下区间:
~到11,11到14,14到~
3.产生区间锁的相关操作。
update ... where/
delete .. where/
select ...from...lock in share mode/
select .. from .. for update /
都会添加间隙锁
如果where后面使用的等号(=)就会不会包括临界值,例如,在 delete from test where a=9 ,区间锁定范围在~到11,但是不包括11.
如果where后面使用的大于或是小于就包括临界值,例如,在 delete from test where a<9 ,区间锁定范围在~到11,并且包括11.
4.innodb锁类型:
Record-lock:键值本身
gap:锁定一个范围,不包括临界值
Next-Key-Lock:锁定一个范围包括左表的临界值
为了防止幻觉读,innodb在插入数据的时候会监测相邻的两个范围(不包含临界值)是否被锁定,如果被锁定就不允许插入。
但是在以下情况下next-key-lock会降级为Record-lock.
1.当查询中包含唯一索引并且能根据这个值查询到数据时,next-key-lock会降级为recrod-lock
2.当唯一索引是复合索引时,必须用到索引的所有列,next-key-lock才会降级为recrod-lock 。(未验证)
另外next-key-lock会锁定当前值的前后两个范围,但是不包括临界值。
#############################################
间隙锁参考链接:
http://www.2cto.com/database/201410/343841.html
5.死锁案例分析:
innodb next-key lock引发的死锁:
/article/6251071.html
唯一键造成的死锁:
/article/6393867.html
mysql中的delete死锁
http://hedengcheng.com/?p=844
本文出自 “SQLServer MySQL” 博客,请务必保留此出处http://dwchaoyue.blog.51cto.com/2826417/1683720
#####################
测试数据:
CREATE TABLE `test` (
`a` int(11) NOT NULL,
PRIMARY KEY (`a`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
insert into test value(11) ;
insert into test value(14) ;
###########################################
1.什么是区间锁(gap)
gap会锁定某个区间,防止数据的插入,来避免幻影读。
2.什么是区间。
例如测试表中的数据11,14. 这些数据包括以下区间:
~到11,11到14,14到~
3.产生区间锁的相关操作。
update ... where/
delete .. where/
select ...from...lock in share mode/
select .. from .. for update /
都会添加间隙锁
如果where后面使用的等号(=)就会不会包括临界值,例如,在 delete from test where a=9 ,区间锁定范围在~到11,但是不包括11.
如果where后面使用的大于或是小于就包括临界值,例如,在 delete from test where a<9 ,区间锁定范围在~到11,并且包括11.
4.innodb锁类型:
Record-lock:键值本身
gap:锁定一个范围,不包括临界值
Next-Key-Lock:锁定一个范围包括左表的临界值
为了防止幻觉读,innodb在插入数据的时候会监测相邻的两个范围(不包含临界值)是否被锁定,如果被锁定就不允许插入。
但是在以下情况下next-key-lock会降级为Record-lock.
1.当查询中包含唯一索引并且能根据这个值查询到数据时,next-key-lock会降级为recrod-lock
2.当唯一索引是复合索引时,必须用到索引的所有列,next-key-lock才会降级为recrod-lock 。(未验证)
另外next-key-lock会锁定当前值的前后两个范围,但是不包括临界值。
#############################################
间隙锁参考链接:
http://www.2cto.com/database/201410/343841.html
5.死锁案例分析:
innodb next-key lock引发的死锁:
/article/6251071.html
唯一键造成的死锁:
/article/6393867.html
mysql中的delete死锁
http://hedengcheng.com/?p=844
本文出自 “SQLServer MySQL” 博客,请务必保留此出处http://dwchaoyue.blog.51cto.com/2826417/1683720
相关文章推荐
- Linux rpm 命令参数使用详解[介绍和应用]
- POJ 2442 Sequence (STL优先队列)
- iOS学习笔记11-iOS应用国际化教程(2014版)
- android--gradle编译龟速?offline!
- 支付宝支付功能
- Activity生命周期学习笔记,和横竖切屏时候activity销毁时候保存数据和调用的方法
- leetcode 123 —— Best Time to Buy and Sell Stock III
- 单例模式的结构
- mybatis 与spring整合配置
- iOS开发——swift实现简单的全局键盘管理器
- (2015)最新破解企业QQ拦截个人QQ功能
- 去OpenCVManager,大部分为转载,仅当自己学习使用
- Undefined symbols for architecture i386: "_crc32", referenced from:——crc链接错误
- Cocos2d-x 3.4版本 新建项目 IOS版
- android app安装位置选择
- lync enable
- HDU 4862 Jump(最小费用最大流-mcmf)
- 为UIView设置渐变背景
- PAT 1002. 写出这个数
- Svn 提示错误:previous operation has not finished 解决方案