Spec-Zone.ru › MySQL Connectors 1.0

3.6.11 Получение уникального ID последней вставленной строки

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

Вы можете проверить из ваших приложений на языке C, было ли значение сохранено в столбец AUTO_INCREMENT, выполнив следующий код (предполагается, что вы проверили, что операция выполнена успешно). Он определяет, была ли операция запросом с индексом AUTO_INCREMENT:

if ((result = mysql_store_result(&mysql)) == 0 &&
    mysql_field_count(&mysql) == 0 &&
    mysql_insert_id(&mysql) != 0)
{
    used_id = mysql_insert_id(&mysql);
}

Когда новое значение AUTO_INCREMENT было сгенерировано, вы также можете получить его, выполнив операцию SELECT LAST_INSERT_ID() с mysql_real_query() или mysql_query() и извлечь значение из набора результатов, возвращённого операцией.

При вставке нескольких значений возвращается последнее автоматически инкрементированное значение.

Для AUTO_INCREMENT, последнее сгенерированное ID сохраняется на сервере на основе каждого соединения. Оно не изменяется другим клиентом. Оно даже не изменяется, если вы обновляете другой столбец AUTO_INCREMENT с неволшебным значением (то есть значением, которое не является NULL и не является 0). Одновременное использование AUTO_INCREMENT и AUTO_INCREMENT столбцов несколькими клиентами является полностью допустимым. Каждый клиент получит последнее вставленное ID для последней операции, которую выполнил этот клиент.

Если вы хотите использовать ID, сгенерированный для одной таблицы, и вставить его во вторую таблицу, вы можете использовать SQL-операции, подобные этим:

INSERT INTO foo (auto,text)
    VALUES(NULL,'text');         # generate ID by inserting NULL
INSERT INTO foo2 (id,text)
    VALUES(LAST_INSERT_ID(),'text');  # use ID in second table

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

Для получения дополнительной информации о получении последнего ID в столбце AUTO_INCREMENT:

  • Для получения информации о AUTO_INCREMENT, который может быть использован в SQL-операции, см. .

  • Для получения информации о mysql_insert_id(), функции, используемой из C API, см. Раздел 5.4.42, «mysql_insert_id()».

  • Для получения информации о получении значения автоинкремента при использовании Connector/J, см. Получение значений столбца AUTO_INCREMENT через JDBC.

  • Для получения информации о получении значения автоинкремента при использовании Connector/ODBC, см. Получение значений автоинкремента.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/c-api-8.0-en/getting-unique-id.html

Spec-Zone.ru

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