![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 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 ? |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 14 Всего: 386 |
bars80080, А к чему такие оптимизации? типа, хочется все сделать "одним запросом"?
Нельзя, так как между любыми двумя запросами из php в mysql МОГУТ проскочить сколь угодно много других запросов от других процессов. Варианты: -- залочить таблицу на добавление записей, и сделать грязное дело ервым способом... -- использовать хранимую процедуру, которая сама сделает обновление таблицы после вставки данных. Хотя выигрыш от хранимых процедур может и не впечатлить ;) тут придется работать по второму способу. Хотя вместе с локом может проити и первый. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 9 Всего: 315 |
тупо напрягает ну раз нет, так нет
что-то я не понял, а зачем тут лочить таблицу? разве я не получу в любом случае корректный id последнего запроса insert в текущем скрипте от select last_insert_id()? я думал, что там автоматом определяется относительно открытого соединения |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 14 Всего: 386 |
bars80080, я путаю первый и второй
Первый способ по моему - это -- залочить таблицу на запись, -- узнать номер следующей вставляемой записи с помощью show table status -- и смонтировать нужный запрос и выполнить его. а второй - это обычный, через last_insert_id -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 9 Всего: 401 |
а триггером это не сделается?
-------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 9 Всего: 315 |
триггер мы не потянем, да и не нужно наверное в такой мизерной задаче
лочить - это лишние запросы, хотя и попроще метод, но не будем искать лишних приключений спасибо |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Базы Данных | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |