为什么select for update没有阻塞呢?

1. 一个会话执行如下语句

begin;

update test set detail=’zzzzz’ where id = 6;

2. 另一个会话执行如下语句

begin ;

select * from test where id = 6 for update;

预期会话2阻塞,实际查询输出了结果,这个为什么与预期不符呢?

附:隔离级别是读已提交

这个问题出在哪个版本的数据库

GaussDB Kernel 505.2.1.SPC0900 build be757d6a compiled at 2025-10-25 10:43:21 commit 10709 last mr 25287 release

社区版本是可以的:

这个表里有 id=6 的数据没?

是的 看看update了几条。如果为0条就不会等待。

记录是存在的

记录实际发生变更了吗?

从查询的结果看是发生了,但是目前我重现不出来了,现在select for update会等2分钟左右,报锁等超时。

在会话1的事务没有提交或回滚的情况下,会话2没有阻塞,可能的情况1. update的where子句没有匹配到任何行;2. update语句实际未产生变更;3. 两个语句走了不同的索引。