我得到了一个如下所示的用户表:
| id | username | active |
可能有多个条目具有相同的用户名和 active=0
,但只有一个具有相同用户名且设置了 active=1
的唯一条目。
确保两个同时请求不会创建重复项的最佳方法是什么?
(Session1:SELECT;0 行、Session2:Select;0 行、Session1:Insert、Session2:Insert
=> 重复条目)
我发现我可以设置 active=NULL
而不是 active=0
并将 username&active 设置为唯一,这将实现我正在寻找的东西 - 但这似乎这是一个相当老套的解决方案,并且不能在所有数据库引擎中可靠地工作。
我已经看到了将 active=0
条目移至第二个表的建议,但这看起来也很困惑,并且会在所有选择查询中产生开销。
最佳答案
您可以使用表锁定。该命令锁定表并阻止所有人写入。
<?
$dbh->exec("LOCK TABLES tbl WRITE");
// Check whether you have an active element.
// You can make it inactive or whatever. You
// are the only one who has access to this table.
$dbh->exec("UNLOCK TABLES");
?>
您可以在documentation中阅读更多相关内容。 .
关于php - mysql - 防止同时请求出现重复的 "active"条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21944800/