tidb的for update skip locked失效

在测试环境中,我有一个简单的表,MSG_INFO 其中有主键字段MSG_ID varchar类型,这个表只有一条数据,msg_id=‘1’,设置事务的隔离级别是读已提交,并且设置了手动提交事务,会话1中执行start transaction; select * from MSG_INFO where msg_id=‘1’ for update 然后不提交,在会话2中执行start transaction; select * from MSG_INFO where msg_id=‘1’ for update 发现该条数据被锁住无法执行,这情况是正常的,然后在会话2中执行 start transaction; select * from MSG_INFO where msg_id=‘1’ for update skip locked,发现却能查询出这一条数据,这就代表skip locked失效了,怎么解决,求!!!

确认一下使用版本信息呢

1 个赞

tidb的版本是v7.5.3

lock 是针对 insert 或者 update,delete ( X Model ),不针对 Select . (Share Model)

不论是哪种事务模式,都是可以 select 到 value 的,但是是 dirty value,还是 last value ,或者是 tempoate value,则是可选的…

tidb 采用的是 MVCC,肯定能拿到 value ,正常情况…

感觉场景没说得太明白… 有可能的话,请多补充下

mgs_id 是varchar类型还是 int类型?看之前这个版本有对varchar主键和skip locked进行过修复

OK,既然你已经设置读已提交隔,尝试验证下当前隔离级别呢

varchar类型的

可以一样场景在 MySQL 上测试下,对比下行为反馈下。如果不一样就去 bug 区反馈下即可。

select也能skip么

目前TiDB不支持skip locked

1 个赞

目前TiDB不支持skip locked

1 个赞

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。