InnoDB普通的Select 语句不加任何锁?

原料

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


INSERT INTO `user` VALUES ('1', 'wang');
INSERT INTO `user` VALUES ('2', 'meng');
INSERT INTO `user` VALUES ('3', 'zhang');

问题

在一个终端执行SQL

Begin
Select * from user where id = 1 for update; # 加入X锁

另一个终端执行SQL

mysql> select * from user where id = 1;
+----+------+
| id | name |
+----+------+
|  1 | wang |
+----+------+
1 row in set

发现执行成功,说明InnoDB普通的Select语句不加任何锁

InnoDB行锁模式兼容性列表

当前锁模式/是否兼容/请求锁模式 X IX S IS
X 冲突 冲突 冲突 冲突
IX 冲突 兼容 冲突 兼容
S 冲突 冲突 兼容 兼容
IS 冲突 兼容 兼容 兼容
阅读 4k
1 个回答

一般的select语句是不加锁呀

如果是count的话,会根据当前的事务级别,做一个类似于快照的东西,在里面算count,所以不会有问题额。

麻烦点赞,采纳啦

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题