面试官:select......for update 会锁表还是锁行?别答错了……

简介: 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代表自动提交。

image.png

结合一下实例验证

实例1:

使用主键id为条件去查询,然后开启另一个事务去更新数据,更新被阻塞,加锁了,锁定要查询的id为1的行数据。

  • 图一为第一个事务,并且没有提交事务
  • 图二为第二个事务,去更新数据,被阻塞了
  • 图三为第二个事务,长时间拿不到锁报错。
  • image.png
  • 实例2:

我们在开启一个事务对另一条id为2的数据进行更新,

image.png

image.png

image.png

image.png

目录
相关文章
|
6月前
|
SQL 关系型数据库 MySQL
被面试官PUA了:创建索引时一定会锁表?
被面试官PUA了:创建索引时一定会锁表?
111 1
被面试官PUA了:创建索引时一定会锁表?
|
Java Spring 容器
面试官:@Configuration 和 @Component 注解的区别?大部分人都会答错!
面试官:@Configuration 和 @Component 注解的区别?大部分人都会答错!
129 0
面试官:@Configuration 和 @Component 注解的区别?大部分人都会答错!
|
SQL 存储 关系型数据库
面试官:MySQL 自增主键一定是连续的吗?大部分人都会答错!
面试官:MySQL 自增主键一定是连续的吗?大部分人都会答错!
|
消息中间件 JavaScript 小程序
面试官:select......for update 会锁表还是锁行?我拴 Q 了!!
面试官:select......for update 会锁表还是锁行?我拴 Q 了!!
|
消息中间件 SQL JavaScript
面试官问:select......for update会锁表还是锁行?
面试官问:select......for update会锁表还是锁行?
|
存储 关系型数据库 MySQL
面试官:MySQL 中的 varchar 最多能存储多少个字符?大部分人都会答错。。。(3)
面试官:MySQL 中的 varchar 最多能存储多少个字符?大部分人都会答错。。。(3)
面试官:MySQL 中的 varchar 最多能存储多少个字符?大部分人都会答错。。。(3)
|
存储 关系型数据库 MySQL
面试官:MySQL 中的 varchar 最多能存储多少个字符?大部分人都会答错。。。(2)
面试官:MySQL 中的 varchar 最多能存储多少个字符?大部分人都会答错。。。(2)
702 0
面试官:MySQL 中的 varchar 最多能存储多少个字符?大部分人都会答错。。。(2)
|
存储 SQL 缓存
面试官:MySQL 中的 varchar 最多能存储多少个字符?大部分人都会答错。。。(1)
面试官:MySQL 中的 varchar 最多能存储多少个字符?大部分人都会答错。。。
174 0
面试官:MySQL 中的 varchar 最多能存储多少个字符?大部分人都会答错。。。(1)
|
索引
面试官:为什么要尽量避免使用 IN 和 NOT IN?大部分人都会答错...
面试官:为什么要尽量避免使用 IN 和 NOT IN?大部分人都会答错...
124 0
面试官:为什么要尽量避免使用 IN 和 NOT IN?大部分人都会答错...
面试官:private 方法可以被代理吗?别答错了。。
面试官:private 方法可以被代理吗?别答错了。。
219 0