BBCCBB
V2EX  ›  程序员

[MySQL] 如何在 mysql5.7 版本实现 8.0 版本的 for update skip locked 功能?

By BBCCBB at 2021 年 3 月 16 日 · 1901 次点击

万能的 v 友, 看到 mysql8 版本下加了针对 lock 的 no wait 和 skip locked 功能..

比如:

create table A (
  id int primariy key;
)

insert into A values (1), (2), (3);

现在有两个线程 t1, t2.

t1 执行

select * from A where id > 0 for update limit 1;

t2 执行

select * from A where id > 0 for update limit 1;

现在 t2 会在 id=1 的地方等待 t1 释放 id=1 的锁. 而如果 t2 改成这样

select * from A where id > 0 for update skip locked limit 1;

那么 t2 会跳过 id=1 转而针对 id=2 加锁.

但是这个功能是 8.0.1 才加上的

请问大佬们在 mysql5.7 如何实现这种功能呢? 或者说在没有skip locked feature 的数据库上有没有可能通过设计上来实现这个功能呢?

4 条回复  •  2021-03-17 15:08:24 +08:00
BBCCBB
   1
BBCCBB  
OP
   2021 年 3 月 16 日
🐶
killergun
   2
killergun  
   2021 年 3 月 17 日
改源码
BBCCBB
   3
BBCCBB  
OP
   2021 年 3 月 17 日
@killergun 你🐮🍺, 还有其他办法吗
BBCCBB
   4
BBCCBB  
OP
   2021 年 3 月 17 日
捞捞, 没办法就算了
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
© 2026 V2EX · 33ms · 3.9.8.5