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.