2016-09-30 2 views
2

У меня есть эта таблица структуры:MySQL, ЗАМЕНИТЬ INTO без удаления?

ID RATE1 RATE2 RATE3 

и его пустым. Позволяет дать новый курс:

REPLACE INTO rates (ID, RATE2) VALUES (99, 4); 

таблица будет:

99, 0, 4, 0 

до сих пор так хорошо. Другой рейтинг имеет место:

REPLACE INTO rates (ID, RATE3) VALUES (99, 2); 

и здесь произошла ошибка. Я получаю

99, 0, 0, 2 

вместо:

99, 0, 4, 2 

Я хотел сохранить rate2 тоже. Есть ли обходной путь для этого?

ответ

5

Использовать INSERT...ON DUPLICATE KEY UPDATE вместо REPLACE.

INSERT INTO ThisTable (id, rate3) VALUES (99, 2) 
    ON DUPLICATE KEY UPDATE rate3=VALUES(rate3); 

Это оставляет другие столбцы существующего ряда как они были.

Демо: http://sqlfiddle.com/#!9/0ae4a

+0

, если я хочу обобщить: после того, как следующее: ON KEY UPDATE DUPLICATE, я всегда должен скопировать "rate3 = VALUES (rate3)" выражение по столбцам, что Im обновляемых? –

+1

Да, это обновляет указанные столбцы со значениями, которые вы пытались вставить. Вы можете прочитать http://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html для получения дополнительной информации. –

Смежные вопросы