【MySQL】innodb行锁变表锁

【MySQL】innodb行锁变表锁,第1张

概述关于下文中的表格看法,按照时间轴排列的InnoDB 行级锁是通过给索引上的索引项加锁来实现的,InnoDB行级锁只有通过索引条件检索数据,才使用行级锁;否则,InnoDB使用表锁在不通过索引(主键)条件查询的时候,InnoDB是表锁而不是行锁。创建表创建一个没有主键的表CREATE TABLE `test_no_key` (`f1` int(11) NOT NULL ,`f2...

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

InnoDB 行级锁是通过给索引上的索引项加锁来实现的,InnoDB行级锁只有通过索引条件检索数据,才使用行级锁;否则,InnoDB使用表锁
在不通过索引(主键)条件查询的时候,InnoDB是表锁而不是行锁。

创建表

创建一个没有主键的表

CREATE table `test_no_key` (`f1`  int(11) NOT NulL ,`f2`  varchar(11)  DEFAulT NulL )ENGINE=InnoDB
插入俩条数据
insert into from test_no_key (f1,f2) values (1,2);insert into test_no_key (f1,f2) values (2,2);
开启俩个进程

案例1

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

进程1进程2
beginbegin

会出现等待

进程1执行提交

案例2

给表加上主键


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

进程1进程2

案例3

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

查看表数据

进程1进程2

总结

以上是内存溢出为你收集整理的【MySQL】innodb行锁变表锁全部内容,希望文章能够帮你解决【MySQL】innodb行锁变表锁所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/1151712.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存