面试被问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查询语句的执行过程
May 07 MySQL
MySQL 8.0 之不可见列的基本操作
May 20 MySQL
MySQL 亿级数据导入导出及迁移笔记
Jun 18 MySQL
MySql 缓存查询原理与缓存监控和索引监控介绍
Jul 02 MySQL
MySQL 聚合函数排序
Jul 16 MySQL
MySQL中连接查询和子查询的问题
Sep 04 MySQL
MySQL为数据表建立索引的原则详解
Mar 03 MySQL
一次Mysql update sql不当引起的生产故障记录
Apr 01 MySQL
MySQL 数据表操作
May 04 MySQL
MySQL数据库 安全管理
May 06 MySQL
MySQL详细讲解变量variables的用法
Jun 21 MySQL
Mysql数据库group by原理详解
Jul 07 MySQL
mysql的数据压缩性能对比详情
Nov 07 #MySQL
Mysql数据库手动及定时备份步骤
一篇文章看懂MySQL主从复制与读写分离
MySQL基于索引的压力测试的实现
Nov 07 #MySQL
基于MySql验证的vsftpd虚拟用户
Nov 07 #MySQL
MySQL悲观锁与乐观锁的实现方案
SpringBoot连接MySQL获取数据写后端接口的操作方法
You might like
二十行语句实现从Excel到mysql的转化
2006/10/09 PHP
利用PHP+JS实现搜索自动提示(实例)
2013/06/09 PHP
基于PHP读取csv文件内容的详解
2013/06/18 PHP
php+xml实现在线英文词典之添加词条的方法
2015/01/23 PHP
JavaScript实现滚动栏效果的方法
2015/04/27 PHP
Zend Framework动作控制器用法示例
2016/12/09 PHP
Javascript 获取链接(url)参数的方法
2009/02/15 Javascript
javascript学习之闭包分析
2010/12/02 Javascript
个人总结的一些JavaScript技巧、实用函数、简洁方法、编程细节
2015/06/10 Javascript
使用jquery+CSS3实现仿windows10开始菜单的下拉导航菜单特效
2015/09/24 Javascript
JavaScript实现职责链模式概述
2018/01/25 Javascript
微信小程序mpvue点击按钮获取button值的方法
2019/05/29 Javascript
JS前端广告拦截实现原理解析
2020/02/17 Javascript
[01:14:35]DOTA2上海特级锦标赛B组资格赛#1 Alliance VS Fnatic第一局
2016/02/26 DOTA
[57:18]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#3VP VS VG
2016/03/03 DOTA
[09:31]2016国际邀请赛中国区预选赛Yao赛后采访 答题送礼
2016/06/27 DOTA
Python中itertools模块用法详解
2014/09/25 Python
python中的多重继承实例讲解
2014/09/28 Python
在Python中利用Pandas库处理大数据的简单介绍
2015/04/07 Python
python调用staf自动化框架的方法
2018/12/26 Python
Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】
2019/03/30 Python
Python Django Vue 项目创建过程详解
2019/07/29 Python
Python3中的f-Strings增强版字符串格式化方法
2020/03/04 Python
HTML5的Geolocation地理位置定位API使用教程
2016/05/12 HTML / CSS
小米旗下精品生活电商平台:小米有品
2018/12/18 全球购物
文职个人求职信范文
2013/09/23 职场文书
总经理助理岗位职责
2013/11/08 职场文书
2014年三八妇女节活动方案
2014/02/28 职场文书
2014年五四青年节演讲比赛方案
2014/04/22 职场文书
触电现场处置方案
2014/05/14 职场文书
小学生放飞梦想演讲稿
2014/08/26 职场文书
聚众斗殴罪辩护词
2015/05/21 职场文书
雷锋的故事观后感
2015/06/10 职场文书
OpenCV图像变换之傅里叶变换的一些应用
2021/07/26 Python
简单聊一聊SQL注入及防止SQL注入
2022/03/23 MySQL
为什么MySQL不建议使用SELECT *
2022/04/03 MySQL