MySQL обрабатывает один запрос SQL за раз? - PullRequest
2 голосов
/ 16 февраля 2010

Если у вас есть 100 000 пользователей, выполняет ли MySQL один SQL-запрос за раз?

Потому что в моем PHP-коде я проверяю, существует ли определенная строка; если это не так, он создает один. Если это так, он просто обновляет счетчик строк.

Мне пришло в голову, что, возможно, 100 пользователей проверяют, существует ли строка одновременно, а когда нет, все они создают по одной строке.

Если MySQL обрабатывает их последовательно, я знаю, что это не будет проблемой, тогда один пользователь проверит, существует ли он, если нет, создайте его. Другой пользователь проверит, существует ли он, и, поскольку это так, он просто обновляет счетчик.

Но если они все проверят, существует ли он в одно и то же время, и, скажем, нет, то все они создают одну строку, и вся структура таблицы потерпит неудачу.

Было бы замечательно, если бы кто-то мог пролить свет на эту тему.

Ответы [ 2 ]

2 голосов
/ 16 февраля 2010

Используйте ограничение UNIQUE или, если возможно, сделайте первичный ключ одним из элементов данных, и сервер SQL предотвратит создание дублирующихся строк. Вы даже можете использовать синтаксис «ON DUPLICATE KEY UPDATE ...», чтобы указать альтернативную операцию, если строка уже существует.

Судя по вашим комментариям, вы можете использовать user_id в качестве первичного ключа, и в этом случае вы сможете использовать что-то вроде этого:

INSERT INTO usercounts (user_id,usercount)
VALUES (id-goes-here,1)
ON DUPLICATE KEY UPDATE usercount=usercount+1;
1 голос
/ 16 февраля 2010

Если вы поставите чек и вставите в транзакцию, вы можете избежать этой проблемы. Таким образом, проверка и создание будут выполняться как один запрос, и не должно быть путаницы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...