Innodb锁机制
来源:互联网 发布:工业数据采集系统 编辑:程序博客网 时间:2024/05/22 01:30
http://www.mysqlops.com/2012/05/19/locks_in_innodb.html#more-3169
这篇博客写的比较详细,下面主要是做一下测试对下面的矩阵进行验证
G I R N (已经存在的锁,包括等待的锁)
G + + + +
I - + + -
R + + - -
N + + - -
现在有数据库 id num
2 2
10 10
其中id为主键并带有唯一索引,num字段无索引
上面的文章主要写了查询中使用索引的情况,对于查询中不使用索引的情况 delete from test where num= 2 来说 ,会对表进行表锁定。
可以使用 show status like '%table_lock%' 查看,具体的表锁定实现机制暂时不清楚,在实验中验证 ,表锁定所有的行,表现为所有行的R锁,并组织插入行以及表锁定的获取并且阻塞表锁定,行锁定与表锁定的关系相同。
对于这段描述
Read Uncommitted和Read Committed时,不需要在间隙上加锁,Nexk-Key变成Record锁。我认为是错误的
下面这行是mysql官方文档的描述
在范围类型UPDATE
和DELETE语句,InnoDB必须对范围覆盖的间隙设置next-key锁定或间隙锁定以及其它用户做的块插入。这是很必要的,因为要让MySQL复制和恢复起作用,“幽灵行”必须被阻止掉。
我测试了一下 用例是这样 有 id,num 两个字段 有记录 (1,1) (20,20)
隔离级别为Read Committed 我使用 T1 执行 delete from test where id<15
有很多人认为 幻读在REPEATABLE_READ 里是不存在,还将原因归结到 多版本的作用,其实并不是这样的
在本例子中 delete from test where id <100 对于where子句使用索引的情况下 ,“幽灵行” 是被禁止的,因为 gap 是阻塞 insert的
但是对于 delete from test where num<100 的时候则是加 record锁定 ,record 与insert 是不阻塞的 ,这种情况会出现幻读
如 ti 执行 delete from test where num<100 t2 执行 insert into test values(10,10) 则会出现幽灵行 10.
- Innodb锁机制
- Innodb 锁机制
- Innodb锁机制
- Innodb锁机制
- Innodb锁机制
- MySQL InnoDB 锁机制
- MySQL/InnoDB锁机制
- Innodb锁机制
- Innodb锁机制
- Innodb锁机制
- innodb锁机制
- MYSQL-InnoDB 锁机制
- MySQL InnoDB 锁机制详解
- MySQL的InnoDB锁机制
- MySQL InnoDB 悲观锁机制
- 【数据库】 InnoDB的锁机制
- Mysql InnoDB 锁机制学习
- MySQL- InnoDB锁机制
- 虚拟机与主机互相ping
- 口水文章—虚拟机中Ubuntu安装VMware Tools
- AJAX——核心XMLHttpRequest对象
- 单词博弈解题思路 文思海辉编程大赛
- Exercise 4.4
- Innodb锁机制
- 1、solr的安装启动及运行
- 多态(未完)
- 使用cloudera的hadoop资料
- Linux网络配置总结
- 字符识别数据集,文档分析相关的资源
- 给大家分享个 网站头像上传的 插件
- MFC实现不规则形状窗口(CF登陆窗口)
- 静态变量