2015-02-24 2 views
0

Я разрабатываю веб-приложение с PHP и MySQL, поскольку у меня есть ситуация, когда мне нужно ограничить количество записей, которые нужно вставить в таблицу.Параллельный запрос PHP и MySQL

... 
const MAX= 10 
if(/*record count query*/ < $this::MAX) { 
/*insert query*/ 
} 
... 

Для целей тестирования я запускаю этот код только с помощью запроса GET из браузера.

Когда я нажимаю клавишу F5 (обновлять) непрерывно в течение примерно 5 секунд, счетчик превышает MAX.

Но когда я иду один за другим, счет находится в пределе.

Это показывает, что когда я нажимаю F5 непрерывно count query был исполнен, а insert query выполняется одновременно. Я понятия не имею, как решить эту проблему, мне будет полезно руководство.

ответ

1

У вас должно быть LOCK таблицы, поэтому никакой другой процесс не записывается в базу данных, когда вы пытаетесь получить текущий счет. В противном случае вы всегда рискуете, что другой процесс в настоящее время вставляет данные.

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

+0

Я получаю номер ошибки: 1100 Таблица «пример» не была заблокирована с помощью ТАБЛИЦЕЙ LOCK – bkmagnetron

+0

Примечание: запрос будет считываться из одной таблицы и вставляться в другую таблицу. Итак, я использовал много вложенных запросов. – bkmagnetron

+0

Хорошо, он работал после использования имени псевдонима для таблиц подзапросов. – bkmagnetron

Смежные вопросы