考慮下面的例子:意外基數違規(子查詢返回多於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
列中將兩行寫入重複值?
如果是這樣,我將來如何避免再次發生這種情況? (我在這裏採取了錯誤的方法?)。
我在這裏沒有看到子查詢。我錯過了什麼嗎? –