Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> получить id на упреждение 
V
    Опции темы
bars80080
Дата 9.8.2010, 15:24 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 9
Всего: 315



возникла такая задачка: при вставке записи в БД (mysql) надо одно поле заполнить неким параметром, вычисление которого основывается на id этой записи.

не сложно после запроса insert... запросить идентификатор: select last_insert_id(), а затем апдейтом обновить это самое поле

но ведь текущее значение автоинкремента можно получить из show table status

будет ли получение значения id заранее чревато ошибкой, когда между show table status и insert проскочит запрос другого пользователя?
или просто не заморачиваться и делать традиционно insert, select last_insert_id(), update ?
PM MAIL WWW   Вверх
ksnk
Дата 9.8.2010, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 14
Всего: 386



bars80080, А к чему такие оптимизации? типа, хочется все сделать "одним запросом"?
Нельзя, так как между любыми двумя запросами из php в mysql МОГУТ проскочить сколь угодно много других запросов от других процессов.
Варианты:
-- залочить таблицу на добавление записей, и сделать грязное дело ервым способом...
-- использовать хранимую процедуру, которая сама сделает обновление таблицы после вставки данных. Хотя выигрыш от хранимых процедур может и не впечатлить ;) тут придется работать по второму способу. Хотя вместе с локом может проити и первый.




--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
bars80080
Дата 9.8.2010, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 9
Всего: 315



Цитата(ksnk @  9.8.2010,  16:00 Найти цитируемый пост)
А к чему такие оптимизации?

тупо напрягает

ну раз нет, так нет


Цитата(ksnk @  9.8.2010,  16:00 Найти цитируемый пост)
-- залочить таблицу на добавление записей, и сделать грязное дело ервым способом...

что-то я не понял, а зачем тут лочить таблицу? разве я не получу в любом случае корректный id последнего запроса insert в текущем скрипте от select last_insert_id()?

я думал, что там автоматом определяется относительно открытого соединения
PM MAIL WWW   Вверх
ksnk
Дата 9.8.2010, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 14
Всего: 386



bars80080, я путаю первый и второй  smile 

Первый способ по моему -  это 
-- залочить таблицу на запись, 
-- узнать номер следующей вставляемой записи с помощью show table status 
-- и смонтировать нужный запрос и выполнить его.

а второй - это обычный, через last_insert_id


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
SelenIT
Дата 9.8.2010, 23:39 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 9
Всего: 401



а триггером это не сделается?


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
bars80080
Дата 10.8.2010, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 9
Всего: 315



триггер мы не потянем, да и не нужно наверное в такой мизерной задаче

лочить - это лишние запросы, хотя и попроще метод, но не будем искать лишних приключений

спасибо
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0510 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.