#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. Да, это то, что означает «только необходимо, если».