
关于下文中的表格看法,按照时间轴排列的
创建表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 |
|---|---|
| begin | begin |
| 会出现等待 | |
| 进程1执行提交 | |
给表加上主键
这个测试可以看到,当有主键时,是行锁,只会对一条数据进行加锁
| 进程1 | 进程2 |
|---|---|
如果查询的条件没有带索引,那么行锁则会转为表锁即时表中字段有主键;所以在查询的时候建议使用索引字段查询
查看表数据
| 进程1 | 进程2 |
|---|---|
以上是内存溢出为你收集整理的【MySQL】innodb行锁变表锁全部内容,希望文章能够帮你解决【MySQL】innodb行锁变表锁所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)