Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Условия в запросах

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
DelphinPRO
Отправлено: 21 Августа, 2013 - 12:12:15
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




Требуетя обновить поле в записи таблицы. Но перед этим проверить, не изменилось ли оно ранее другим пользователем. Поле может иметь два состояния "0" и "1".
Вот я хочу прямо в UPDATE запросе сделать проверку, если в поле записан 0, то записать туда 1, а если там 1, то ничего не делать. Ничего не делать, чтобы affected rows был равен нулю.
Я буду проверять результат запроса, и если строки не затронуты - отменять транзакцию (это последний запрос в транзакции). Реально? Или делать двумя запросами (SELECT+UPDATE)? А если между этими двумя запросами воткнется другой пользователь?


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Мелкий Супермодератор
Отправлено: 21 Августа, 2013 - 12:19:39
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Так update .... where .... and field=0
Update атомарен, посреди операции никто другой не вклинится.


-----
PostgreSQL DBA
 
 Top
Zuldek
Отправлено: 21 Августа, 2013 - 12:26:08
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




SELECT field FROM table FOR UPDATE;
?

(Отредактировано автором: 21 Августа, 2013 - 12:27:33)

 
 Top
DelphinPRO
Отправлено: 21 Августа, 2013 - 12:43:04
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




Мелкий, ёлки-палки!!! Спасибо.
(Добавление)
Zuldek
а в эту запись я не въехал...


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Мелкий Супермодератор
Отправлено: 21 Августа, 2013 - 12:49:04
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




DelphinPRO пишет:
а в эту запись я не въехал...

Запрос select ... for update помимо непосредственно запроса ещё получит блокировку - т.е. до окончания транзакции значение уже никто другой не поменяет.


-----
PostgreSQL DBA
 
 Top
Zuldek
Отправлено: 21 Августа, 2013 - 13:27:10
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




подчеркну, — только выбранные значения, а не блокировка всей таблицы.
 
 Top
Мелкий Супермодератор
Отправлено: 21 Августа, 2013 - 14:51:31
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Zuldek, всё же, только выбранные строки.


-----
PostgreSQL DBA
 
 Top
DelphinPRO
Отправлено: 21 Августа, 2013 - 15:32:46
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




Благодарю.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB