Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как залочить правильно таблицу read/write ? / 2 сообщений из 2, страница 1 из 1
16.01.2017, 13:16
    #39385384
alexlucas007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как залочить правильно таблицу read/write ?
Добрый день.
Такая ситуация :
Когда ко мне приходит запрос, я проверяю если похожие запросы уже были, если нет - записываю строку в таблицу , если да - ничего не делаю.
Дело в том, что ко мне приходят два одинаковых запроса в один момент.
Первый скрипт запускается, ищет в таблице запись - видит что её нет, добавляет запись.
Второй скрипт запускается, первый не успевает ещё добавить строку, селект во твором скрипте ничего не возвращает, в итоге у меня появляется ещё одна запись.

Я пытался в начале транзакции добавить LOCK TABLES table_name WRITE, и в конце UNLOCK TABLES, но у меня лочатся в итоге вообще все таблицы, соответственно запросы никак не логируются.

Как правильно залочить таблицу, чтобы второй скрипт ждал пока первый прочитает/запишет ?
...
Рейтинг: 0 / 0
16.01.2017, 15:05
    #39385470
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как залочить правильно таблицу read/write ?
alexlucas007Я пытался в начале транзакции добавить LOCK TABLES table_name WRITE, и в конце UNLOCK TABLES, но у меня лочатся в итоге вообще все таблицы
Вы определитесь.
Либо Вы организуете указанный набор операций в рамках транзакции - тогда Вам никакие локи не требуются, но нужно правильно выбрать/настроить уровень изоляции.
Либо Вы никаких транзакций не организуете - вот тогда действительно нужно блокировать таблицу. Но учтите, что второй процесс в этом случае будет давать ошибку, в то время как в первом варианте - ожидать окончания первой транзакции, чтобы заблокировать ресурсы для второй (ну или резанётся по тайм-ауту).

Но ещё разумнее просто безусловно добавлять. Но структура таблицы должна содержать уникальный индекс по выражению, по которому Вы собственно проверяете необходимость добавления записи. Тогда при наличии записи будет отказ во вставке по причине нарушения уникальности, и запись не добавится - собственно желаемый результат.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как залочить правильно таблицу read/write ? / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]