【MySQL】innodb行锁变表锁

网友投稿 741 2022-05-30

关于下文中的表格看法,按照时间轴排列的

InnoDB 行级锁是通过给索引上的索引项加锁来实现的,InnoDB行级锁只有通过索引条件检索数据,才使用行级锁;否则,InnoDB使用表锁

在不通过索引(主键)条件查询的时候,InnoDB是表锁而不是行锁。

创建表

创建一个没有主键的表

CREATE TABLE `test_no_key` ( `f1` int(11) NOT NULL , `f2` varchar(11) DEFAULT NULL ) ENGINE=InnoDB

1

2

3

4

【MySQL】innodb行锁变表锁

5

插入俩条数据

insert into from test_no_key (f1,f2) values (1,2); insert into test_no_key (f1,f2) values (2,2);

1

2

3

4

开启俩个进程

案例1

就是在没有使用索引的情况下InnoDB就会使用表级锁(共享锁不会有这个情况)

案例2

给表加上主键

这个测试可以看到,当有主键时,是行锁,只会对一条数据进行加锁

案例3

如果查询的条件没有带索引,那么行锁则会转为表锁即时表中字段有主键;所以在查询的时候建议使用索引字段查询

查看表数据

Mysql 任务调度

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:看Ogrekit源码的小结
下一篇:Kubernetes集群EmptyDir的数据存储类型(三十二)
相关文章