Mysql InnoDB行锁不使用索引锁表的时候会锁整张表

 

原文:http://www.thinkphp.cn/topic/41577.html

 

如果使用针对InnoDB的表使用行锁,被锁定字段不是主键,也没有针对它建立索引的话。行锁锁定的也是整张表。锁整张表会造成程序的执行效率会很低。
具体测试步骤如下:
1. 创建测试表

注意表类型设置成为InnoDB
2. 插入测试数据

3. 不使用索引的情况,线程1进行查询结果如下

这时候来启动另一个查询窗口,使用线程2进行查询

发现虽然查询条件不一样,但是记录同样被锁死,查询不到结果,线程1进行事务提交后,线程2显示查询结果。所以查询1进行的不是行锁而是表锁。
4. 对nickname字段建立索引

重复步骤3,发现查询结果显示出来了,证明有索引的情况下,行锁生效了。

 

posted @ 2019-08-26 11:42  这个名字想了很久~  阅读(4214)  评论(0编辑  收藏  举报