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

2021-03-16 18:58:57 +08:00
 BBCCBB

万能的 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 的数据库上有没有可能通过设计上来实现这个功能呢?

1248 次点击
所在节点    程序员
4 条回复
BBCCBB
2021-03-16 22:25:42 +08:00
🐶
killergun
2021-03-17 08:17:38 +08:00
改源码
BBCCBB
2021-03-17 08:28:54 +08:00
@killergun 你🐮🍺, 还有其他办法吗
BBCCBB
2021-03-17 15:08:24 +08:00
捞捞, 没办法就算了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/762233

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX