面试被问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 相关文章推荐
如何用Navicat操作MySQL
May 12 MySQL
MySQL 全文索引使用指南
May 25 MySQL
MySQL之PXC集群搭建的方法步骤
May 25 MySQL
SQL实现LeetCode(175.联合两表)
Aug 04 MySQL
MySQL非空约束(not null)案例讲解
Aug 23 MySQL
SQL IDENTITY_INSERT作用案例详解
Aug 23 MySQL
mysql主从复制的实现步骤
Oct 24 MySQL
SQL优化老出错,那是你没弄明白MySQL解释计划用法
Nov 27 MySQL
MySQL表锁、行锁、排它锁及共享锁的使用详解
Apr 02 MySQL
Mysql查询时间区间日期列表,不会由于数据表数据影响
Apr 19 MySQL
SQL Server数据库的三种创建方法汇总
May 08 MySQL
MySQL索引失效十种场景与优化方案
May 08 MySQL
mysql的数据压缩性能对比详情
Nov 07 #MySQL
Mysql数据库手动及定时备份步骤
一篇文章看懂MySQL主从复制与读写分离
MySQL基于索引的压力测试的实现
Nov 07 #MySQL
基于MySql验证的vsftpd虚拟用户
Nov 07 #MySQL
MySQL悲观锁与乐观锁的实现方案
SpringBoot连接MySQL获取数据写后端接口的操作方法
You might like
使用php将某个目录下面的所有文件罗列出来的方法详解
2013/06/21 PHP
php中使用base HTTP验证的方法
2015/04/20 PHP
php实现大文件断点续传下载实例代码
2019/10/01 PHP
让你的PHP,APACHE,NGINX支持大文件上传
2021/03/09 PHP
用js解决数字不能换行问题
2010/08/10 Javascript
JS对象与json字符串格式转换实例
2014/10/28 Javascript
JavaScript通过prototype给对象定义属性用法实例
2015/03/23 Javascript
jquery分页插件jquery.pagination.js实现无刷新分页
2016/04/01 Javascript
JS中取二维数组中最大值的方法汇总
2016/04/17 Javascript
解决给dom元素绑定click等事件无效问题的方法
2017/02/17 Javascript
js正则表达式验证表单【完整版】
2017/03/06 Javascript
js中作用域的实例解析
2017/03/16 Javascript
微信小程序之数据缓存的实例详解
2017/09/29 Javascript
微信小程序实现张图片合成为一张并下载
2019/07/16 Javascript
JS实现音乐导航特效
2020/01/06 Javascript
python使用装饰器和线程限制函数执行时间的方法
2015/04/18 Python
python通过smpt发送邮件的方法
2015/04/30 Python
Python类的用法实例浅析
2015/05/27 Python
详解在Python程序中解析并修改XML内容的方法
2015/11/16 Python
Windows下将Python文件打包成.EXE可执行文件的方法
2018/08/03 Python
python生成器与迭代器详解
2019/01/01 Python
详解python 模拟豆瓣登录(豆瓣6.0)
2019/04/18 Python
Python实现获取当前目录下文件名代码详解
2020/03/10 Python
django admin后管定制-显示字段的实例
2020/03/11 Python
python七种方法判断字符串是否包含子串
2020/08/18 Python
巴西电子、家电、智能手机购物网站:Girafa
2019/06/04 全球购物
英国百年闻名的优质健康产品连锁店:Holland & Barrett
2019/12/19 全球购物
药剂学专业应届生自荐信
2013/09/29 职场文书
民事诉讼代理授权委托书
2014/10/11 职场文书
2015应届毕业生自荐信范文
2015/03/05 职场文书
2015年政协委员工作总结
2015/05/20 职场文书
大学生安全教育心得体会
2016/01/15 职场文书
大学生军训心得体会5篇
2019/08/15 职场文书
mysql如何配置白名单访问
2021/06/30 MySQL
Golang实现可重入锁的示例代码
2022/05/25 Golang
python读取mat文件生成h5文件的实现
2022/07/15 Python