Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте, объясните мне пожалуйста как работает блокировка SELECT ... FOR UPDATE? Читал документацию, но остаются вопросы, ответы которых не могу найти.
Допустим в разных частях приложения есть такой запрос
Отредактированно webJunior (18.09.2018 18:12:42)
Неактивен
1. Блокируется не таблица, а только выбранные записи в таблице по FOR UPDATE.
2. Думаю да, иначе нет смысла в блокировке.
3. Колонки не имеют значения, без Where будут заблокированы все записи в таблице, но не сама таблица.
4. Это не имеет смысла так как блокируются только выбранные записи. К ним Инсерт не применишь.
Отредактированно klow (18.09.2018 18:33:54)
Неактивен
klow написал:
1. Блокируется не таблица, а только выбранные записи в таблице по FOR UPDATE.
2. Думаю да, иначе нет смысла в блокировке.
3. Колонки не имеют значения, без Where будут заблокированы все записи в таблице, но не сама таблица.
4. Это не имеет смысла так как блокируются только выбранные записи. К ним Инсерт не применишь.
Спасибо за ответ. Хотел бы уточнить некоторые детали
1. Т.е блокировка вступает в силу если происходит изменение строк, которые подходят по условию в запросе FOR UPDATE, правильно? Если никаких транзакций нет на момент запроса FOR UPDATE или изменения происходят в строках, которые не подходят по условию, блокировок не происходит?
2. Допустим в таблице user_requests идет запись каких-то данных, на каждого юзера может быть только одна строка с status равным 0, как только status в этой строке сменился на 1, ему разрешается делать следующую запись.
Сперва делается SELECT на отсутствие записи с status=0 и после этого делается INSERT. Каким образом можно блокировать SELECT если происходит INSERT в эту таблицу?
Неактивен