技术解析
万能的 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 转而针对 i大带宽服务器d=2 加锁.
但是这个功能是 8.0.1 才加上的
请问大佬们在 mysql5.7 如何实现这种功能呢? 或者说在没有skip locked
feature 的数据库上有没有可能通过设计上来实现这个功能呢?