万能的 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 的数据库上有没有可能通过设计上来实现这个功能呢?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.