gpt4 book ai didi

MySQL block 选择/读取特定行

转载 作者:行者123 更新时间:2023-11-28 23:25:31 25 4
gpt4 key购买 nike

我正在开发一个流量很大的调用中心 IVR 系统。我想给每个来电者一个随机的免费代表聊天。

我现在做的是:

SELECT admin FROM admins WHERE live = 1 AND available = 1 ORDER BY RAND() LIMIT 1

获得免费代表后,我将他更新为不可用:

UPDATE admins SET available = 0 WHERE admin = XXX

测试后,我注意到如果调用者几乎同时调用,有时他们会同时接到同一个代表。

我已经尝试将“FOR UPDATE”添加到选择查询中,但它并没有真正帮助锁定要选择的行。

知道如何解决这个问题吗?

最佳答案

这称为竞争条件。一种方法是锁定表,但这会减慢速度。另一个想法是同时进行更新和获取 id:

UPDATE admins 
SET available = if(@id := admin, 0, 0)
WHERE live = 1 AND available = 1
ORDER BY RAND()
LIMIT 1;

SELECT @id;

这将返回受影响行的 id

关于MySQL block 选择/读取特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39557874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com