Рассмотрим следующий пример:Неожиданное нарушение мощность (подзапросов возвращает более чем на 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
(с x
в колонке unique_id
).
... Продолжая эту логику:
запрос выполняется при просмотре Page A
:
SELECT `id` FROM `table` WHERE `unique_id` = x;
Сегодня я получил следующее сообщение об ошибке:
SQLSTATE[21000]: Cardinality violation: 1242 Subquery returns more than 1 row
Это первый раз, когда я экспериментирую (с таблицей, превышающей 20 тыс. строк).
Возможно, что если бы два отдельных пользователя одновременно нажали на Button A
точно в тот же момент времени (вплоть до миллисекунды), то две строки могли быть записаны с повторяющимися значениями в столбце unique_id
?
Если да, то как я могу избежать этого в будущем? (Я использую неправильный подход здесь?).
Здесь я не вижу подзапроса. Я что-то упускаю? –