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 :: insert и update в одном запросе

 PHP.SU

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


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

> Без описания
BlackHacker
Отправлено: 06 Апреля, 2013 - 20:51:02
Post Id


Новичок


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


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




Привет всем. Долго гуглил, но решения найти не смог. Да и язык MySql знаю не слишком хорошо. Хотелось бы составить такой запрос, который выберет запись из базы, и одновременно обновит данные в ней (нужно получить данные для работы с ними, и пометить эту строку в таблице как заблокированную, чтобы другой пользователь не смог получить к ней доступ, пока эти данные используются другим пользователем). Заранее спасибо за помощь.
 
 Top
LIME
Отправлено: 06 Апреля, 2013 - 22:01:29
Post Id


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


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


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




в одном запросе не получится так как при инсерте и апдейте таблица блокируется(либо затронутая строка, зависит от движка) и селект невозможен
это ответ и на второй вопрос
 
 Top
BlackHacker
Отправлено: 07 Апреля, 2013 - 05:56:06
Post Id


Новичок


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


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




Тогда придется делать два запроса. А велика ли вероятность, что пока выполнился первый запрос Select, но еще не выполнился второй запрос Update, другой пользователь может получить эти данные в этот промежуток времени между запросами? (если конечно нагрузка на сайт будет большая)
 
 Top
_Dark_
Отправлено: 07 Апреля, 2013 - 08:08:15
Post Id


Частый гость


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


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

[+]


Выборка данных это SELECT, а не INSERT.
Выполняйте два запроса, насчет этого промежутка вообще не беспокойтесь, он невероятно мал (если, конечно, у вас все в порядке с производительностью). Я не располагаю точными данными, но если, допустим, эта задержка составит 30 миллисекунд (а она по идее гораздо меньше), то посещаемость вашего сайта должна быть 33 пользователя в секунду, чтобы была возможность попасть в этот промежуток времени.

(Отредактировано автором: 07 Апреля, 2013 - 08:16:41)

 
 Top
Мелкий Супермодератор
Отправлено: 07 Апреля, 2013 - 10:24:40
Post Id



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


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


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




_Dark_ пишет:
посещаемость вашего сайта должна быть 33 пользователя в секунду

По нынешним меркам называться хайлоадом - это обрабатывать больше 150 страниц в секунду. Т.е. запросто угодить в интервал между запросами.

LIME пишет:
(либо затронутая строка, зависит от движка) и селект невозможен

И опять же зависит от движка.
innoDB чтению не мешает. MVCC, пока апдейтится запись, другие читают предыдущую версию данных.

BlackHacker пишет:
пока выполнился первый запрос Select, но еще не выполнился второй запрос Update

Используйте select for update http://dev[dot]mysql[dot]com/doc/refman/[dot][dot][dot]cking-reads[dot]html


-----
PostgreSQL DBA
 
 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