Согласно документации PHP, mysql_insert_id
принимает последний вставленный id из таблицы mysql.
Мой вопрос: если у меня есть веб-сайт, который вставляет в БД более 2 строк в секунду, могу ли я использовать mysql_insert_id
и получить правильный идентификатор, на который я ссылаюсь в запросе INSERT
на строку раньше?
Из руководства MySQL:
Идентификатор, который был сгенерирован, поддерживается на сервере для каждого подключения. Это означает, что значение, возвращаемое функцией для данного клиента, является первым значением AUTO_INCREMENT, сгенерированным для самого последнего оператора, влияющим на столбец AUTO_INCREMENT этого клиента. Это значение не может повлиять на других клиентов, даже если они генерируют собственные значения AUTO_INCREMENT. Такое поведение гарантирует, что каждый клиент может получить свой собственный идентификатор, не заботясь о деятельности других клиентов, и без необходимости блокировок или транзакций.
Короткий вариант: безопасно использовать.
mysql_insert_id дает вам идентификатор вставки самого последнего оператора INSERT в соединении, которое вы ему даете.
Если вы вызовете это сразу после своей вставки, в том же соединении mysql, вы получите вставленный идентификатор, соответствующий этому вставному оператору, независимо от любых других вставок, проходящих в среднем времени.