Last Id и блокировка таблицы

Alkinoy

Guest
Last Id и блокировка таблицы

Вопрос такой. Необходимо получить id только что вставленной записи. Делаю так:
1. Блокирую таблицу.
2. Делаю вставку
3. Получаю id (mysql_insert_id)
4. Освобождаю таблицу

Теперь подскажите параноику - прав ли я, поступая подобным образом. Цель - получить правильный id записи, что бы не получилось, что между вставкой данных и выбором id в таблицу никто ничего не вставил. Сорри, если оффтопик.

PS Проверять пробовал (один скрипт непрерывно в базу кидает, второй в это время реализует вышеописанный алгоритм) - вроде все пучком, но могу ж и ошибаться!
 

Alkinoy

Guest
В скобках я просто указал чем я получаю id. Это не код, это алгоритм.
 

StUV

Rotaredom
=)
это тоже не код
если явно указать link_identifier от операции insert, то проблемы вообще быть не должно
(насколько мне позволяет понять man мой англ. - сам с траблом не сталкивался)
 

Alkinoy

Guest
???
Я думал, что:

Только для операторов SELECT, SHOW, EXPLAIN или DESCRIBE функция mysql_query() возвращает идентификатор ресурса, FALSE если запрос не был выполнен корректно. Для других типов SQL-операторов mysql_query() возвращает TRUE при успехе, FALSE при ошибке.

То есть просто вернулось ТРУ и все..... ща надо проверить, спасибо ))
 

StUV

Rotaredom
ЗЫ: из мана по мускулу (см. LAST_INSERT_ID):
Значение последнего сгенерированного ID сохраняется на сервере для данного конкретного соединения и не будет изменено другим клиентом. Оно не будет изменено даже при обновлении другого столбца AUTO_INCREMENT конкретной величиной (то есть, которая не равна NULL и не равна 0).
 

StUV

Rotaredom
Только для операторов SELECT, SHOW, EXPLAIN или DESCRIBE функция mysql_query() возвращает идентификатор ресурса, FALSE если запрос не был выполнен корректно. Для других типов SQL-операторов mysql_query() возвращает TRUE при успехе, FALSE при ошибке
еще немного полистав ман подумалось....
Вопрос к ГУРУ: видимо в данном случае указывается link не от запроса, а от коннекта ? так ?
 

Alkinoy

Guest
Я думаю что так

PS StUV отдельное спасибо ))
 

Falc

Новичок
В большенстве случаев 'link_identifier' тоже указывать не надо, т.к. ПХП подставляет индентификатор последнего соединения с мускулом.
Проблемы обычно бывают тогда когда у вас идет последовательно несколько инсертов и если в последнем была ошибка, например вставка не приизошла из-за нарушения уникальности уникального поля, тогда вызов данной функции вернет ID предпоследней вставки что не допустимо.
Так что перед вызовом данной функции надо ОБЯЗАТЕЛЬНО проверять была ли успешная вставка в инсерте.
 

Falc

Новичок
Да забыл сказать, что таблицы блакировать вовсе не обязательно, т.к. для каждого соеденения сохраняеться свой LAST_INSERT_ID
 
Сверху