Я хочу добавить строку в таблицу базы данных, но если существует строка с тем же уникальным ключом, я хочу обновить строку.
Например,
insert into table (id, name, age) values(1, "A", 19)
Допустим, уникальный ключ - id
, а в моей базе данных есть строка с id = 1
. В этом случае я хочу обновить эту строку этими значениями. Обычно это дает ошибку. Если я использую insert IGNORE
, он проигнорирует ошибку, но все равно не будет обновляться.
Используйте INSERT ... НА ОБЪЕКТЕ КЛЮЧЕВОГО ОБНОВЛЕНИЯ
КВАРИЙ:
INSERT INTO table (id, name, age) VALUES(1, "A", 19) ON DUPLICATE KEY UPDATE
name="A", age=19
Проверьте REPLACE
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;
Надеюсь, это поможет.
Попробуй это:
ВСТАВИТЬ В таблицу (id, name, age) ЗНАЧЕНИЯ ('1', 'Мухаммед', '21') НА ОБЪЕКТЕ КЛЮЧЕВОГО ОБНОВЛЕНИЯ name = 'Мухаммед', age = '21'
Запись:
Здесь, если id является первичным ключом, то после первой вставки с id = '1'
каждый раз, когда попытка вставить id = '1'
, будет обновляться имя и возраст, а предыдущее имя возраст изменится.
INSERT IGNORE INTO table (id, name, age) VALUES (1, "A", 19);
INSERT INTO TABLE (id, name, age) VALUES(1, "A", 19) ON DUPLICATE KEY UPDATE 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
является основным ключом. Или он просто вставляет другой ряд. См. INSERT (SQLite).
Просто потому, что я искал это решение, но для обновления из другой идентично структурированной таблицы (в моем случае веб-сайт тестирует DB для работы с 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
, хотя я согласен, что это, вероятно, лучшая практика.
В моем случае я создал запросы ниже, но в первом запросе, если id
1 уже существует и возраст уже существует, после этого, если вы создадите первый запрос без age
, значение age
будет равно none
REPLACE into table SET `id` = 1, `name` = 'A', `age` = 19
чтобы избежать вышеупомянутой проблемы, создайте запрос, как показано ниже
INSERT INTO table SET `id` = '1', `name` = 'A', `age` = 19 ON DUPLICATE KEY UPDATE `id` = "1", `name` = "A",`age` = 19
пусть это поможет тебе ...
В случае, если вы хотите сохранить старое поле (например, имя). Запрос будет:
INSERT INTO table (id, name, age) VALUES(1, "A", 19) ON DUPLICATE KEY UPDATE
name=name, age=19;