Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
Требуетя обновить поле в записи таблицы. Но перед этим проверить, не изменилось ли оно ранее другим пользователем. Поле может иметь два состояния "0" и "1".
Вот я хочу прямо в UPDATE запросе сделать проверку, если в поле записан 0, то записать туда 1, а если там 1, то ничего не делать. Ничего не делать, чтобы affected rows был равен нулю.
Я буду проверять результат запроса, и если строки не затронуты - отменять транзакцию (это последний запрос в транзакции). Реально? Или делать двумя запросами (SELECT+UPDATE)? А если между этими двумя запросами воткнется другой пользователь?
----- Чем больше узнаю, тем больше я не знаю.
Мелкий
Отправлено: 21 Августа, 2013 - 12:19:39
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Так update .... where .... and field=0
Update атомарен, посреди операции никто другой не вклинится.
----- PostgreSQL DBA
Zuldek
Отправлено: 21 Августа, 2013 - 12:26:08
Постоянный участник
Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
Мелкий, ёлки-палки!!! Спасибо. (Добавление) Zuldek
а в эту запись я не въехал...
----- Чем больше узнаю, тем больше я не знаю.
Мелкий
Отправлено: 21 Августа, 2013 - 12:49:04
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
DelphinPRO пишет:
а в эту запись я не въехал...
Запрос select ... for update помимо непосредственно запроса ещё получит блокировку - т.е. до окончания транзакции значение уже никто другой не поменяет.
----- PostgreSQL DBA
Zuldek
Отправлено: 21 Августа, 2013 - 13:27:10
Постоянный участник
Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010
Помог: 50 раз(а)
подчеркну, — только выбранные значения, а не блокировка всей таблицы.
Мелкий
Отправлено: 21 Августа, 2013 - 14:51:31
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Zuldek, всё же, только выбранные строки.
----- PostgreSQL DBA
DelphinPRO
Отправлено: 21 Августа, 2013 - 15:32:46
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.