Вставить в таблицу MySQL или обновить, если существует



Я хочу добавить строку в таблицу базы данных, но если строка существует с тем же уникальным ключом, я хочу обновить строку.



например,



insert into table (id, name, age) values(1, "A", 19)


допустим, уникальный ключ id, и в моей базе данных есть строка с id = 1. В этом случае я хочу обновить эту строку с этими значениями. Обычно это дает ошибку. Если я использую insert IGNORE он будет игнорировать ошибку, но он все равно не будет обновляться.

672   9  

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` ) 

Comments

    Ничего не найдено.