Вставьте в таблицу MySQL или обновите, если существует
Я хочу добавить строку в таблицу базы данных, но если строка существует с тем же уникальным ключом, я хочу обновить строку.
например,
insert into table (id, name, age) values(1, "A", 19)
допустим, уникальный ключ id
, и в моей базе данных есть строка с id = 1
. В этом случае я хочу обновить эту строку этими значениями. Обычно это дает ошибку. Если я использую insert IGNORE
он будет игнорировать ошибку, но она все равно не будет обновляться.
9 ответов
использовать INSERT ... ON DUPLICATE KEY UPDATE
запрос:
INSERT INTO table (id, name, age) VALUES(1, "A", 19) ON DUPLICATE KEY UPDATE
name="A", age=19
проверить заменить
http://dev.mysql.com/doc/refman/5.0/en/replace.html
REPLACE into table (id, name, age) values(1, "A", 19)
при использовании пакетной вставки используйте следующий синтаксис:
INSERT INTO TABLE (id, name, age) VALUES (1, "A", 19), (2, "B", 17), (3, "C", 22)
ON DUPLICATE KEY UPDATE
name = VALUES (name),
...
попробуйте это:
INSERT INTO table (id, name, age) VALUES (1, 'A', 19) ON DUPLICATE KEY UPDATE id = id + 1;
надеюсь, что это помогает.
попробуйте это:
INSERT INTO table (id,name,age) VALUES('1','Mohammad','21') ON DUPLICATE KEY UPDATE name='Mohammad',age='21'
Примечание:
Вот если ID является первичным ключом, то после первой вставки с id='1'
каждый раз при попытке вставить id='1'
обновит имя и возраст, а предыдущее имя возраст изменится.
INSERT IGNORE INTO table (id, name, age) VALUES (1, "A", 19);
INTO TABLE (id, name, age) VALUES(1, "A", 19) ON DUPLICATE UPDATE SET NAME = "A", AGE = 19;
REPLACE INTO table (id, name, age) VALUES(1, "A", 19);
все эти решения будут работать по вашему вопросу.
Если вы хотите знать подробно об этих заявление по этой ссылке
при использовании SQLite:
REPLACE into table (id, name, age) values(1, "A", 19)
предусмотрено, что id
является первичным ключом. Или просто вставляет еще одну строку. См.вставить (SQLite).
просто потому, что я искал это решение, но для обновления из другой одинаково структурированной таблицы (в моем случае тест веб-сайта DB для live DB):
INSERT live-db.table1
SELECT *
FROM test-db.table1 t
ON DUPLICATE KEY UPDATE
ColToUpdate1 = t.ColToUpdate1,
ColToUpdate2 = t.ColToUpdate2,
...
как уже упоминалось в другом месте, только столбцы, которые вы хотите обновить, должны быть включены после ON DUPLICATE KEY UPDATE
.
нет необходимости перечислять столбцы в INSERT
или SELECT
, хотя я согласен, что это, вероятно, лучшая практика.
INSERT INTO table (id, name, age) VALUES (1, 'A', 19) ON DUPLICATE KEY UPDATE id = id + 1;
также не забывайте беспокоиться об уникальном ограничении ключа.
ALTER TABLE `table` ADD UNIQUE `unique_key` ( `id` )