Задавайте вопросы, мы ответим
Вы не зашли.
Подскажите пожалуйста какое значение вернет функция LAST_INSERT_ID() после вставки записи.
Конкретно: делаем вставку данных
For LAST_INSERT_ID(), the most recently generated ID is maintained in the server on a per-connection basis. It is not changed by another client. It is not even changed if you update another AUTO_INCREMENT column with a nonmagic value (that is, a value that is not NULL and not 0). Using LAST_INSERT_ID() and AUTO_INCREMENT columns simultaneously from multiple clients is perfectly valid. Each client will receive the last inserted ID for the last statement that client executed.
В английском не силён (переводчик юзал), так что боюсь ошибиться в верном ответе...
Отредактированно new_saler (09.01.2013 17:30:13)
Неактивен
LAST_INSERT_ID() будет верным для данной сессии, то есть это последний id в данной сессии. Использовать его безопасно с точки зрения одновременных подключений.
Неактивен
Спасибо за быстрый ответ!
rgbeast написал:
LAST_INSERT_ID() будет верным для данной сессии, то есть это последний id в данной сессии. Использовать его безопасно с точки зрения одновременных подключений.
В данном случае сессия - имеется ввиду подключение пользователя?
Допустим: есть скрипт, который вставляет данные в одну таблицу и в этом же скрипте последний вставленный АВТОИНКРЕМЕНТОМ ID считывается и вставляется в другую таблицу.
Если к данному скрипту подключилось 100 пользователей и каждый почти одновременно произвел вставку данных в эту таблицу, то получается для каждого из ста пользователей идентификатор ID последней вставленной записи будет храниться в памяти именно ЕГО (до завершения работы скрипта) и во вторую таблицу вставятся соответственные и верные данные?
Извините, что столь подробно спрашиваю, но нужно достоверно убедиться правильно ли я понимаю действие этой функции.
Еще раз спасибо.
Отредактированно new_saler (09.01.2013 17:50:25)
Неактивен
Скрипт будет каждый раз создавать подключение к MySQL и LAST ID будет свой в рамках каждого подключения. Если нужна достоверность, протестируйте скрипт на нагрузке.
Неактивен
Если Вы хотите получить сгенерированное Вами ID до того, как другой пользователь будет добавлять свои записи, значит, нужно всем остальным пользователям запретить добавлять записи, пока Вы не завершите Вашу транзакцию. Значит оба оператора:
INSERT INTO table1 VALUES(NULL, alex, message);
SELECT LAST_INSERT_ID();
( а может быть и еще какие-то операторы)
должны выполнятся как одна транзакция.
В этом случае только после завершения транзакции будут сняты все блокировки, и другой пользователь сможет добавлять записи. И тогда Вы получите свое ID. Читайте управление транзакциями в MySQL.
Неактивен
LAST_INSERT_ID() будет в любом случае вашим вставленным id, даже если кто-то вставил еще записи. Транзакция позволит обеспечить синхронность на более высоком уровне, но в простых случаях не является необходимой.
Неактивен