技术解析

[MySQL] 如何在 mysql5.7 版本实现 8.0 版本的 for update skip locked 功能?
0
2021-06-09 15:39:26
idczone

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


数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服