面试被问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 相关文章推荐
如何自己动手写SQL执行引擎
Jun 02 MySQL
你知道哪几种MYSQL的连接查询
Jun 03 MySQL
mysql如何配置白名单访问
Jun 30 MySQL
MySQL系列之四 SQL语法
Jul 02 MySQL
QT连接MYSQL数据库的详细步骤
Jul 07 MySQL
教你如何让spark sql写mysql的时候支持update操作
Feb 15 MySQL
面试提问mysql一张表到底能存多少数据
Mar 13 MySQL
MySQL创建表操作命令分享
Mar 25 MySQL
MySQL中优化SQL语句的方法(show status、explain分析服务器状态信息)
Apr 09 MySQL
优化Mysql查询的示例
Apr 26 MySQL
MySQL下载安装配置详细教程 附下载资源
Sep 23 MySQL
DQL数据查询语句使用示例
Dec 24 MySQL
mysql的数据压缩性能对比详情
Nov 07 #MySQL
Mysql数据库手动及定时备份步骤
一篇文章看懂MySQL主从复制与读写分离
MySQL基于索引的压力测试的实现
Nov 07 #MySQL
基于MySql验证的vsftpd虚拟用户
Nov 07 #MySQL
MySQL悲观锁与乐观锁的实现方案
SpringBoot连接MySQL获取数据写后端接口的操作方法
You might like
php 中的4种标记风格介绍
2012/05/10 PHP
PHP的异常处理类Exception的使用及说明
2012/06/13 PHP
php生成静态html页面的方法(2种方法)
2015/09/14 PHP
php对接java现实加签验签的实例
2016/11/25 PHP
PHP实现创建一个RPC服务操作示例
2020/02/23 PHP
javascript对中文按照拼音排序代码
2014/08/20 Javascript
在Linux系统中搭建Node.js开发环境的简单步骤讲解
2016/01/26 Javascript
Node.js测试中的Mock文件系统详解
2016/11/21 Javascript
javascript入门之数组[新手必看]
2016/11/21 Javascript
react.js使用webpack搭配环境的入门教程
2017/08/14 Javascript
React Native实现地址挑选器功能
2017/10/24 Javascript
详解vue axios二次封装
2018/07/22 Javascript
webpack4.x开发环境配置详解
2018/08/04 Javascript
Layui数据表格之获取表格中所有的数据方法
2018/08/20 Javascript
Vue注册组件命名时不能用大写的原因浅析
2019/04/25 Javascript
js实现飞机大战游戏
2020/08/26 Javascript
element-ui 弹窗组件封装的步骤
2021/01/22 Javascript
python使用cookielib库示例分享
2014/03/03 Python
python获取局域网占带宽最大3个ip的方法
2015/07/09 Python
Python对文件和目录进行操作的方法(file对象/os/os.path/shutil 模块)
2017/05/08 Python
python正则表达式之对号入座篇
2018/07/24 Python
如何利用Boost.Python实现Python C/C++混合编程详解
2018/11/08 Python
python判断一个对象是否可迭代的例子
2019/07/22 Python
Python 进程操作之进程间通过队列共享数据,队列Queue简单示例
2019/10/11 Python
PHP基于phpqrcode类库生成二维码过程解析
2020/05/28 Python
python对批量WAV音频进行等长分割的方法实现
2020/09/25 Python
Python生成pdf目录书签的实例方法
2020/10/29 Python
德国黑胶唱片、街头服装及运动鞋网上商店:HHV
2018/08/24 全球购物
LN-CC美国:伦敦时尚生活的缩影
2019/02/19 全球购物
武汉世纪畅想数字传播有限公司 .NET笔试题
2015/06/13 面试题
计算机专业毕业生自我鉴定
2014/01/16 职场文书
营销总监岗位职责
2014/09/16 职场文书
法律意见书范文
2015/06/04 职场文书
《作风建设永远在路上》心得体会
2016/01/21 职场文书
工作计划范文之财务管理
2019/08/09 职场文书
导游词之任弼时故居
2020/01/07 职场文书