Spec-Zone.ru › MySQL Connectors 1.0

5.4.38 mysql_insert_id()

my_ulonglong
mysql_insert_id(MYSQL *mysql)

Описание

Возвращает значение, сгенерированное для столбца AUTO_INCREMENT предыдущей командой или . Используйте эту функцию после выполнения команды в таблицу, содержащую поле AUTO_INCREMENT, или после использования или для установки значения столбца с помощью .

Значение, возвращаемое функцией mysql_insert_id(), всегда равно нулю, если явно не обновлено в одном из следующих случаев:

  • Команды , которые сохраняют значение в столбец AUTO_INCREMENT. Это верно, независимо от того, генерируется ли значение автоматически путём сохранения специальных значений NULL или 0 в столбец, или это явное, неспециальное значение.

  • В случае с командой , охватывающей несколько строк, mysql_insert_id() возвращает первое успешно вставленное автоматически сгенерированное значение AUTO_INCREMENT.

    Если ни одна строка не была успешно вставлена, mysql_insert_id() возвращает 0.

  • Если выполняется команда и не было успешно вставлено автоматически сгенерированное значение, mysql_insert_id() возвращает ID последней вставленной строки.

  • Если команда использует , mysql_insert_id() возвращает expr.

  • Команды , которые генерируют значение AUTO_INCREMENT, вставляя в любой столбец или обновляя любой столбец до значения .

  • Если предыдущая команда вернула ошибку, значение mysql_insert_id() неопределено.

Возвращаемое значение функции mysql_insert_id() можно упростить до следующей последовательности:

  1. Если есть столбец AUTO_INCREMENT и было успешно вставлено автоматически сгенерированное значение, вернуть первое такое значение.

  2. Если в команде произошла ошибка , вернуть expr, даже если в затронутой таблице был столбец AUTO_INCREMENT.

  3. Возвращаемое значение зависит от используемой команды. При вызове после команды :

    • Если в таблице есть столбец AUTO_INCREMENT и были вставлены явные значения для этого столбца, вернуть последнее из этих явных значений.

    При вызове после команды :

    • Если в таблице есть столбец AUTO_INCREMENT и были вставлены явные значения или обновлены значения, вернуть последнее из вставленных или обновленных значений.

mysql_insert_id() возвращает 0, если предыдущая команда не использует значение AUTO_INCREMENT. Если вам необходимо сохранить значение на будущее, обязательно вызовите mysql_insert_id() сразу после команды, которая генерирует это значение.

Значение mysql_insert_id() изменяется только командами, выпущенными в текущем подключении клиента. Оно не зависит от команд, выпущенных другими клиентами.

Функция SQL будет содержать значение первого успешно вставленного автоматически сгенерированного значения. не сбрасывается между командами, так как значение этой функции сохраняется на сервере. Другое отличие от mysql_insert_id() заключается в том, что не обновляется, если вы задаёте столбец AUTO_INCREMENT конкретным неспециальным значением. См. .

mysql_insert_id() возвращает 0 после команды для хранимой процедуры, которая генерирует значение AUTO_INCREMENT, потому что в этом случае mysql_insert_id() относится к , а не к команде внутри процедуры. Внутри процедуры вы можете использовать на уровне SQL для получения значения AUTO_INCREMENT.

Различия между и mysql_insert_id() обусловлены тем, что проще использовать в скриптах, в то время как mysql_insert_id() старается предоставить более точную информацию о том, что происходит со столбцом AUTO_INCREMENT.

Примечание

Пакет OK, используемый в протоколе клиент/сервер, содержит информацию, такую как , которая используется для отслеживания состояния сессии. Когда клиенты считывают пакет OK, чтобы узнать, есть ли изменение состояния сессии, это сбрасывает значения, такие как последний вставленный ID и количество затронутых строк. Такие изменения приводят к тому, что mysql_insert_id() возвращает 0 после выполнения команд, включая, но не ограничиваясь, COM_PING, COM_REFRESH и COM_INIT_DB.

Возвращаемые значения

Описано в предыдущем обсуждении.

Ошибки

  • Пользовательское значение AUTO_INCREMENT в команде с несколькими вставок попадает в диапазон между текущим значением AUTO_INCREMENT и суммой текущего значения и количества затронутых строк.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/c-api-5.7-en/mysql-insert-id.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API