php - mysql - 防止同时请求出现重复的 "active"条目

标签 php mysql

我得到了一个如下所示的用户表:

| 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/

相关文章:

javascript - 如何通过单击按钮调用 JavaScript 函数并在循环文本框中执行操作?

php - Backbone +RequireJS : HTML files loaded with RequireJS are interpreted as JS files

mysql - 如何使用 mysqlimport 解析使用特殊字符作为分隔符的文档?

php - 使用 PHP 创建表并从 MySQL 填充

java - MYSQL Connector/J 插入并获取生成的自增键

php - 在 Opencart 的数据选项卡中添加自定义图像字段

PHP Laravel - 如何使用 Spatie Async 实现并发函数

php - MySQL 使用 php 连接两个表

mysql - 偏移量为 ("LIMIT 500000, 10"的限制)即使在索引之后也很慢?

mysql - 如何使用更新将 BLOB 数据附加/连接到 BLOB 列?