尝试编写一个函数来按日期列的顺序选择和锁定记录,在有时数百个并行线程同时调用该函数的环境中。 我一直在乱序选择记录。
SELECT
INTO _id, _otherid
t1.id, t1.otherid
FROM tbl1 t1
WHERE NOT EXISTS (select 1 from locktbl l where l.otherid = t1.otherid)
ORDER BY t1.recdate
-- FOR UPDATE SKIP LOCKED
LIMIT 1;
IF _id > 0 THEN
INSERT INTO locktbl (id, otherid)
VALUES (_id, _otherid);
END IF;
Table locktbl 对 otherid 列有唯一约束。 尝试使用 FOR UPDATE SKIP LOCKED 或不使用它,但仍然会根据 recdate 乱序选择记录。不管我是否遇到阻塞错误或唯一密钥违规错误,我们都可以在应用程序代码中处理这些错误。我们只需要他们不要被乱序选中。
有什么建议吗? 谢谢。