Значение id = LAST_INSERT_ID(идентификатор)

#php #mysql #mysql-insert-id

#mysql

Вопрос:

Предположим, у меня есть таблица:

 CREATE TABLE files (
    id_prod INT UNSIGNED NOT NULL DEFAULT PRIMARY KEY AUTO_INCREMENT,
    id_rel INT UNSIGNED,
    name VARCHAR(250),
    other VARCHAR(200),
    UNIQUE INDEX(id_rel , name)
);
 

и я хочу использовать unique query для вставки / обновления данных в этой таблице:

 INSERT INTO files (id_rel , name)
VALUES ('25', 'test')
ON DUPLICATE KEY UPDATE
 

теперь, читая руководство по MySQL, я прочитал об этом:

 ON DUPLICATE KEY UPDATE id = LAST_INSERT_ID(id)
 

поэтому я подумал, что мой запрос должен быть:

 INSERT INTO files (id_rel , name)
VALUES ('25', 'test')
ON DUPLICATE KEY UPDATE id_prod = LAST_INSERT_ID(id), name = 'TESTED'
 

но в чем разница, если я использую только:

 INSERT INTO files (id_rel , name)
VALUES ('25', 'test')
ON DUPLICATE KEY UPDATE name = 'TESTED'
 

?

Я не могу понять значение LAST_INSERT_ID(id) . Что такое (id) и что он должен делать?

Ответ №1:

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

Из документации:

Если expr задается в качестве аргумента LAST_INSERT_ID() , значение аргумента возвращается функцией и запоминается как следующее значение, которое должно быть возвращено LAST_INSERT_ID() .

Если вы используете идиому, которую вы указали, LAST_INSERT_ID() вернет либо идентификатор новой строки, которая была вставлена, либо строки, которая была обновлена.

Комментарии:

1. Большое вам спасибо! Но если мне не нужен ПОСЛЕДНИЙ идентификатор, который я вставил ИЛИ обновил, тогда в этом нет необходимости, я прав? WHERE id_prod = '$var_id' Я бы использовал в UPDATE запросе, здесь заменен ON DUPLICATE KEY , если я правильно понял…

2. Да, это то, что означает «только необходимо, если».