面试被问select......for update会锁表还是锁行


Posted in MySQL onNovember 11, 2021

select查询语句是不会加锁的,但是select .......for update除了有查询的作用外,还会加锁呢,而且它是悲观锁。

那么它加的是行锁还是表锁,这就要看是不是用了索引/主键。

没用索引/主键的话就是表锁,否则就是是行锁。

验证:

建表sql

//id为主键  
//name 为唯一索引
CREATE TABLE `user` (
	`id` INT ( 11 ) NOT NULL AUTO_INCREMENT,
	`name` VARCHAR ( 255 ) DEFAULT NULL,
	`age` INT ( 11 ) DEFAULT NULL,
    `code` VARCHAR ( 255 ) DEFAULT NULL,
	PRIMARY KEY ( `id` ),
    KEY `idx_age` ( `age` ) USING BTREE 
) ENGINE = INNODB AUTO_INCREMENT = 1570068 DEFAULT CHARSET = utf8

需要关闭自动提交,通过set @@autocommit=0;   设置为手动提交。0代表手动提交,1代表自动提交。

面试被问select......for update会锁表还是锁行

结合一下实例验证 

实例1:

 使用主键id为条件去查询,然后开启另一个事务去更新数据,更新被阻塞,加锁了,锁定要查询的id为1的行数据。

 图一为第一个事务,并且没有提交事务

 图二为第二个事务,去更新数据,被阻塞了

 图三为第二个事务,长时间拿不到锁报错。

面试被问select......for update会锁表还是锁行

面试被问select......for update会锁表还是锁行

面试被问select......for update会锁表还是锁行

实例2:

我们在开启一个事务对另一条id为2的数据进行更新,

面试被问select......for update会锁表还是锁行

面试被问select......for update会锁表还是锁行

实例3(索引):

 一开始的创建表就age创建了唯一索引。

面试被问select......for update会锁表还是锁行

面试被问select......for update会锁表还是锁行

面试被问select......for update会锁表还是锁行

实例4:

 使用普通的字段code去操作

面试被问select......for update会锁表还是锁行

面试被问select......for update会锁表还是锁行

面试被问select......for update会锁表还是锁行

另一个事务我去更新另外一条数据,如果我更新成功了,就是锁行,失败了就是锁表。

面试被问select......for update会锁表还是锁行

面试被问select......for update会锁表还是锁行

结果:

如果查询条件用了索引/主键,那么select ..... for update就会进行行锁。

如果是普通字段(没有索引/主键),那么select ..... for update就会进行锁表。

到此这篇关于面试被问select......for update会锁表还是锁行的文章就介绍到这了,更多相关select for update 内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
详解MySQL事务的隔离级别与MVCC
Apr 22 MySQL
MySQL 覆盖索引的优点
May 19 MySQL
正确使用MySQL update语句
May 26 MySQL
详细谈谈MYSQL中的COLLATE是什么
Jun 11 MySQL
mysql聚集索引、辅助索引、覆盖索引、联合索引的使用
Feb 12 MySQL
MySQL RC事务隔离的实现
Mar 31 MySQL
一文简单了解MySQL前缀索引
Apr 03 MySQL
Mysql排查分析慢sql之explain实战案例
Apr 19 MySQL
MySQL脏读,幻读和不可重复读
May 11 MySQL
Mysql开启外网访问
May 15 MySQL
delete in子查询不走索引问题分析
Jul 07 MySQL
MySQL表字段数量限制及行大小限制详情
Jul 23 MySQL
mysql的数据压缩性能对比详情
Nov 07 #MySQL
Mysql数据库手动及定时备份步骤
一篇文章看懂MySQL主从复制与读写分离
MySQL基于索引的压力测试的实现
Nov 07 #MySQL
基于MySql验证的vsftpd虚拟用户
Nov 07 #MySQL
MySQL悲观锁与乐观锁的实现方案
SpringBoot连接MySQL获取数据写后端接口的操作方法
You might like
农民和部队如何穿矿
2020/03/04 星际争霸
很实用的一个完整email发送程序
2006/10/09 PHP
微信 getAccessToken方法详解及实例
2016/11/23 PHP
js 对象是否存在判断
2009/07/15 Javascript
用Javascript实现锚点(Anchor)间平滑跳转
2009/09/08 Javascript
Dom与浏览器兼容性说明
2010/10/25 Javascript
JS.elementGetStyle(element, style)应用示例
2013/09/24 Javascript
JS兼容浏览器的导出Excel(CSV)文件的方法
2014/05/03 Javascript
jQuery实现模拟marquee标签效果
2015/07/14 Javascript
jQuery表格行上移下移和置顶的实现方法
2015/10/08 Javascript
JSON字符串和对象相互转换实例分析
2016/06/16 Javascript
react-router中的属性详解
2017/06/01 Javascript
Angularjs的$http异步删除数据详解及实例
2017/07/27 Javascript
简单谈谈js的数据类型
2017/09/25 Javascript
浅谈JavaScript 代码简洁之道
2019/01/09 Javascript
JavaScript实现网页跨年倒计时
2020/12/02 Javascript
Python三元运算实现方法
2015/01/12 Python
tf.truncated_normal与tf.random_normal的详细用法
2018/03/05 Python
python从list列表中选出一个数和其对应的坐标方法
2019/07/20 Python
python网络编程 使用UDP、TCP协议收发信息详解
2019/08/29 Python
flask 实现上传图片并缩放作为头像的例子
2020/01/09 Python
python实现最速下降法
2020/03/24 Python
matplotlib阶梯图的实现(step())
2021/03/02 Python
西班牙家用电器和电子产品购物网站:Mi Electro
2019/02/25 全球购物
Sisley法国希思黎中国官网:享誉全球的奢华植物美容品牌
2019/06/30 全球购物
手工制作的音乐盒:Music Box Attic
2019/09/05 全球购物
初三化学教学反思
2014/01/23 职场文书
毕业生个人求职自荐信
2014/02/26 职场文书
学校春季防火方案
2014/06/08 职场文书
计算机软件专业求职信
2014/06/10 职场文书
报表员工作失误检讨书范文
2014/09/19 职场文书
刑事辩护授权委托书范本
2014/10/17 职场文书
盲山观后感
2015/06/11 职场文书
Java由浅入深通关抽象类与接口(上篇)
2022/04/26 Java/Android
2022微信温控新功能上线
2022/05/09 数码科技
win10音频服务未响应怎么解决?win10音频服务未响应未修复的解决方法
2022/08/14 数码科技