面试被问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的join buffer原理
Apr 29 MySQL
MySQL时间盲注的五种延时方法实现
May 18 MySQL
MySQL查看表和清空表的常用命令总结
May 26 MySQL
详细谈谈MYSQL中的COLLATE是什么
Jun 11 MySQL
MySQL 数据恢复的多种方法汇总
Jun 21 MySQL
MySql子查询IN的执行和优化的实现
Aug 02 MySQL
MySQL利用UNION连接2个查询排序失效详解
Nov 20 MySQL
防止web项目中的SQL注入
Dec 06 MySQL
详解MySql中InnoDB存储引擎中的各种锁
Feb 12 MySQL
MySQL时区造成时差问题
Apr 13 MySQL
Mysql 8.x 创建用户以及授予权限的操作记录
Apr 18 MySQL
Mysql 如何合理地统计一个数据库里的所有表的数据量
Apr 18 MySQL
mysql的数据压缩性能对比详情
Nov 07 #MySQL
Mysql数据库手动及定时备份步骤
一篇文章看懂MySQL主从复制与读写分离
MySQL基于索引的压力测试的实现
Nov 07 #MySQL
基于MySql验证的vsftpd虚拟用户
Nov 07 #MySQL
MySQL悲观锁与乐观锁的实现方案
SpringBoot连接MySQL获取数据写后端接口的操作方法
You might like
基于mysql的bbs设计(五)
2006/10/09 PHP
php面向对象全攻略 (七) 继承性
2009/09/30 PHP
win7下memCache的安装过程(具体操作步骤)
2013/06/28 PHP
mac环境中使用brew安装php5.5.15
2014/08/18 PHP
php文件压缩之PHPZip类用法实例
2015/06/18 PHP
php压缩文件夹最新版
2018/07/18 PHP
最近项目写了一些js,水平有待提高
2009/01/31 Javascript
关于window.pageYOffset和document.documentElement.scrollTop
2011/04/05 Javascript
js判断变量是否未定义的代码
2020/03/28 Javascript
详解Angularjs filter过滤器
2016/02/06 Javascript
JavaScript函数节流概念与用法实例详解
2016/06/20 Javascript
深入理解Node.js 事件循环和回调函数
2016/11/02 Javascript
webpack打包单页面如何引用的js
2017/06/07 Javascript
jQuery操作DOM_动力节点Java学院整理
2017/07/04 jQuery
JS实现中文汉字按拼音排序的方法
2017/10/09 Javascript
解决vue多个路由共用一个页面的问题
2018/03/12 Javascript
详解Vue-axios 设置请求头问题
2018/12/06 Javascript
vue+iview动态渲染表格详解
2019/03/19 Javascript
微信小程序自定义弹窗滚动与页面滚动冲突的解决方法
2019/07/16 Javascript
openlayers实现地图测距测面
2020/09/25 Javascript
Python datetime时间格式化去掉前导0
2014/07/31 Python
Python脚本暴力破解栅栏密码
2015/10/19 Python
如何处理Python3.4 使用pymssql 乱码问题
2016/01/08 Python
使用Python爬虫库requests发送表单数据和JSON数据
2020/01/25 Python
matplotlib实现数据实时刷新的示例代码
2021/01/05 Python
matplotlib grid()设置网格线外观的实现
2021/02/22 Python
班组长工作职责
2013/12/25 职场文书
校园餐饮创业计划书
2014/01/10 职场文书
销售团队口号大全
2014/06/06 职场文书
学校食品安全实施方案
2014/06/14 职场文书
幼儿园安全责任书范本
2014/07/24 职场文书
英语三分钟演讲稿
2014/08/19 职场文书
幼儿园迎国庆65周年活动策划方案
2014/09/16 职场文书
试用期旷工辞退通知书
2015/04/17 职场文书
西安事变观后感
2015/06/12 职场文书
董事会决议范本
2015/07/01 职场文书