Ответ 1
Используйте INSERT ... ON DUPLICATE KEY UPDATE
QUERY
INSERT INTO table (id, name, age) VALUES(1, "A", 19) ON DUPLICATE KEY UPDATE
name="A", age=19
Я хочу добавить строку в таблицу базы данных, но если строка существует с тем же уникальным ключом, я хочу обновить строку.
Например,
insert into table (id, name, age) values(1, "A", 19)
Предположим, что уникальный ключ id
, а в моей базе данных есть строка с id = 1
. В этом случае я хочу обновить эту строку этими значениями. Обычно это дает ошибку. Если я использую insert IGNORE
, он проигнорирует ошибку, но он все равно не будет обновляться.
Используйте INSERT ... ON DUPLICATE KEY UPDATE
QUERY
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;
Надеюсь, что это поможет.
Попробуйте следующее:
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);
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):
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
будет равно ни одному.
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;
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` )