面试被问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模式设计
Apr 05 MySQL
详解Mysql 函数调用优化
Apr 07 MySQL
MySQL之高可用集群部署及故障切换实现
Apr 22 MySQL
MySQL Router的安装部署
Apr 24 MySQL
Mysql官方性能测试工具mysqlslap的使用简介
May 21 MySQL
mysql 如何获取两个集合的交集/差集/并集
Jun 08 MySQL
Prometheus 监控MySQL使用grafana展示
Aug 30 MySQL
Mysql Innodb存储引擎之索引与算法
Feb 15 MySQL
mysql查询结果实现多列拼接查询
Apr 03 MySQL
MySql分区类型及创建分区的方法
Apr 13 MySQL
mysql全面解析json/数组
Jul 07 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
长波知识介绍
2021/03/01 无线电
PHP中$_SERVER的详细参数与说明
2008/07/29 PHP
深入理解PHP几个算法:PHP冒泡、PHP二分法、PHP求素数、PHP乘法表
2013/06/06 PHP
PHP如何利用P3P实现跨域
2013/08/24 PHP
使用配置类定义Codeigniter全局变量
2014/06/12 PHP
PHP文件管理之实现网盘及压缩包的功能操作
2017/09/20 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
Jquery ajax执行顺序 返回自定义错误信息(实例讲解)
2013/11/06 Javascript
js如何设置在iframe框架中指定div不显示
2013/12/04 Javascript
jquery的总体架构分析及实现示例详解
2014/11/08 Javascript
javascript DIV实现跟随鼠标移动
2020/03/19 Javascript
javascript中不易分清的slice,splice和split三个函数
2016/03/29 Javascript
jQuery实现微信长按识别二维码功能
2016/08/26 Javascript
Vue.js 递归组件实现树形菜单(实例分享)
2016/12/21 Javascript
Ajax 加载数据 练习代码
2017/01/05 Javascript
详解Vue路由钩子及应用场景(小结)
2017/11/07 Javascript
浅谈Angular HttpClient简单入门
2018/05/04 Javascript
JavaScript反射与依赖注入实例详解
2018/05/29 Javascript
微信小程序中使用wxss加载图片并实现动画效果
2018/08/13 Javascript
[02:28]DOTA2英雄基础教程 狼人
2013/12/23 DOTA
[02:23]完美世界全国高校联赛街访DOTA2第一期
2019/11/28 DOTA
python Crypto模块的安装与使用方法
2017/12/21 Python
Python将多个excel文件合并为一个文件
2018/01/03 Python
如何在python字符串中输入纯粹的{}
2018/08/22 Python
python实现两个dict合并与计算操作示例
2019/07/01 Python
Selenium 滚动页面至元素可见的方法
2020/03/18 Python
Boutique 1美国:阿联酋奢侈时尚零售商
2017/10/16 全球购物
智能旅行箱:Horizn Studios
2018/04/30 全球购物
会计实习期自我鉴定
2013/10/06 职场文书
师范教师毕业鉴定
2014/01/13 职场文书
大专生毕业的自我评价
2014/02/06 职场文书
初中优秀教师事迹材料
2014/08/18 职场文书
2015年学校食堂工作总结
2015/04/22 职场文书
投标售后服务承诺书
2015/04/29 职场文书
领导莅临指导欢迎词
2015/09/30 职场文书
音乐研修感悟
2015/11/18 职场文书