php - 意外的基数违规(子查询返回超过 1 行)

标签 php mysql cardinality

考虑以下示例:

具有结构 id(主键)、 的 MySQL 表() unique_id 存在。

每当用户单击按钮 A 时,PHP 都会执行以下查询:

SELECT `id` FROM `table` WHERE `unique_id` = x; //where x is a `unique_id`

如果查询没有返回任何内容(即 x 尚不存在于 unique_id 列中),新行将插入到 table 中(在 unique_id 列中使用 x


...继续这个逻辑:

查看页面A时执行查询:

SELECT `id` FROM `table` WHERE `unique_id` = x;

今天我收到以下错误:

SQLSTATE[21000]: Cardinality violation: 1242 Subquery returns more than 1 row

这是我第一次遇到这个问题(表超过 20k 行)。

如果两个不同的用户都在同一时刻(精确到毫秒)都单击了 Button A,那么 中的两行可能会写入重复的值>unique_id 列?

如果是这样,我怎样才能避免以后再次发生这种情况? (我在这里采取了错误的方法吗?)。

最佳答案

根据您使用的方法,答案很可能是可以创建两条记录。首先要做的是在 unique_id 列上实际创建 UNIQUE INDEX。根据你的问题,它似乎没有。

这引发了另一个问题。您真的需要表中的 idunique_id 吗?可能只使用一个或另一个。 如果您删除 unique_id 并仅依赖主键并将其转换为自动递增字段,则不会存在此问题。

如果您想继续使用当前的方法,请添加唯一索引,然后先插入

关于php - 意外的基数违规(子查询返回超过 1 行),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39390116/

相关文章:

javascript - 在 primefaces 问题中重定向

php - 每当我尝试请求本地主机 :8000/any using guzzle 时,Laravel 服务器就会挂起

c# - 使用 MySql MySQLMembershipProvider - autogenerateschema ="true"不工作?

php - PDO和MySQL : Subquery using dynamic time? 通过避免while循环来解决使用Join的方法?

php - 为什么我的查询会导致 Cardinality violation error PDO/PHP MySQL

MySQL 表索引基数

php - 升级到 Laravel 5 后的命名空间问题

php - Zend_Form 相当于 ruby​​/rails

php - 如何使用codeigniter上传多张图片

sorting - Elasticsearch 基数排序错误