关于select......for update行表锁的探讨

例题SQL1:select * from tab_user where id = 1 for update
例题SQL2: update tab_user set name = ‘test’ where id = 1
准备工作:SQL1所在事务修改为手动提交事务:set @@autocommit = 1;

我们都知道,select for update根据查询条件是否带索引或主键,会选择性加表锁或行锁,经过sql实验得出如下结果:

select 查询条件锁类型update查询条件update执行结果
id(主键或索引)行锁id可修改其他行记录
name(非主键或索引)表锁name或其他非索引列发生锁超时
name(非主键或索引)表锁id(主键或索引)可修改其他行记录
name、create_time(都为非主键或索引)行锁(多行)name、create_time可修改其他行记录

**疑问:**通过某个公众号了解到了这道题,然后发现关于结果第3个实验,在网上找到的结果也与我实验的不一致,例如百度搜索“select for update行锁还是表锁”,看到的文章给出的实验结果如下:

在这里插入图片描述
按照自己的测试,根据主键还是可以修改其他行记录的,至于上图为何得出阻塞的结果,还请路过的大佬指点下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值