gpt4 book ai didi

mysql - PHP 防止 MySQL 竞争条件

转载 作者:行者123 更新时间:2023-11-29 20:16:55 24 4
gpt4 key购买 nike

我试图阻止“同时”加入的用户选择相同的可用管理员。

我正在做的是:

$conn->beginTransaction();

$sth = $conn->query("SELECT admin,room FROM admins WHERE live = 1 AND available = 1 ORDER BY RAND() LIMIT 1 FOR UPDATE");
$free_admin = $sth->fetch();

if (!empty($free_admin)) {

$conn->query("UPDATE admins SET available = 0 WHERE room = " . $free_admin['room']);

.
.

$conn->commit();

} else {

$conn->rollBack();
}

不幸的是,它并没有真正发挥作用。当流量较高时,许多用户最终会选择相同的免费管理员,这会导致问题。

如何锁定选定的行,以便只能由一个用户读取并更新它,然后其他用户才能读取它?

最佳答案

在更新语句中,使用

 WHERE room = ... AND availabe = 1 

查询结束后,检查mysql的affected_rows以验证您是否成功更改了可用性,如果没有,请重新启动。

关于mysql - PHP 防止 MySQL 竞争条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39705262/

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