Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / SELECT FOR UPDATE / 2 сообщений из 2, страница 1 из 1
10.04.2014, 19:45:09
    #38611762
SerjInsane
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT FOR UPDATE
Есть запрос:
Код: sql
1.
SELECT `phone` FROM `contacts` WHERE `status_id` = 0  LIMIT 1 FOR UPDATE


думал, что с помощью SELECT FOR UPDATE сделаю соответствующую запись недоступной для чтения, но как я понимаю, она таким образом блокируется только для редактирования.

Подскажите, есть ли способы блокирования записи для чтения, чтобы при повторном таком же запросе в результат попала уже другая запись?
...
Рейтинг: 0 / 0
10.04.2014, 19:50:33
    #38611766
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT FOR UPDATE
Есть запрос:
Код: sql
1.
SELECT `phone` FROM `contacts` WHERE `status_id` = 0  LIMIT 1 FOR UPDATE


думал, что с помощью SELECT FOR UPDATE сделаю соответствующую запись недоступной для чтения,


Нет, ты сделаешь её недоступной только для записи.



но как я понимаю, она таким образом блокируется только для редактирования.


Для записи, а не для редактирования.


Подскажите, есть ли способы блокирования записи для чтения, чтобы при повторном таком же запросе в результат попала уже другая запись?


Если ВСЕ читатели этой записи будут её читать с FOR UPDATE, то ты получишь желаемый эффект.
При этом естественно надо открывать явную транзакцию и держать её до окончания изменения.
Сессии, которые будут читать её без FOR UPDATE, прочитают старую версию записи.


(Естественно, подразумевается, что таблица сидит под InnoDB, для MyISAM это всё вообще бессмысленно).
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / SELECT FOR UPDATE / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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