考虑下面的例子:意外基数违规(子查询返回多于1行)
甲MySQL表(table
)与结构id
(主键),value
,unique_id
存在。
每当用户点击Button A
,PHP执行以下查询:
SELECT `id` FROM `table` WHERE `unique_id` = x; //where x is a `unique_id`
如果查询没有返回值(IE x
还没有在unique_id
列存在),新行插入table
(在unique_id
列中有x
)。
...与该逻辑继续:观看Page 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
列中将两行写入重复值?
如果是这样,我将来如何避免再次发生这种情况? (我在这里采取了错误的方法?)。
我在这里没有看到子查询。我错过了什么吗? –