2014-11-03 2 views
0

Я пытаюсь обновить одну таблицу из другой в MYSQL, я сделал:MySQL перемещения данных между таблицами, если есть обновление

INSERT INTO new_table (id, last_name, first_name, etc) 
SELECT (id, last_name, first_name, etc) FROM uploaded_tmp 
ON DUPLICATE KEY UPDATE 

Как Поручаю обновлять значения с новыми значениями?

+0

Вы можете использовать 'UPDATE' для обновления, и' INSERT' для вставки – zerkms

+0

или лучше «UPSERT», http://stackoverflow.com/questions/6107752/how-to-perform-an-upsert-so-that-i-can-use-both-new-and-old -values-in-update-par – matcheek

ответ

1

Существует хорошая функция называется ЗАМЕНЫ

REPLACE INTO new_table (id, last_name, first_name, etc) 
SELECT (id, last_name, first_name, etc) FROM uploaded_tmp 

Он ведет себя так же, как INSERT, но если дубликат ключа происходит (или PRIMARY или UNIQUE), старая запись будет удалена и заменена новыми значениями.

Интересует? Подробнее о http://dev.mysql.com/doc/refman/5.7/en/replace.html

+0

Это неправильно. Это ВСЕ Вставить. Старый набор данных будет удален, а новый вставлен. Поэтому, если вы используете 'AUTO_INCREMENT' на вашем« PRIMARY », появится новый инкрементированный идентификатор. – BreyndotEchse

+0

До тех пор, пока заменяется первичный ключ, он будет таким же. Если первичный ключ не включен в замену данных, да, он получит новый индекс, я должен обновить свой ответ. – David162795

1

вы пропускаете обновления о here.complete это с установкой некоторых данных

использование:

INSERT INTO table(value) 
SELECT id, uid 
FROM tmp t WHERE uid=x 
ON DUPLICATE KEY UPDATE ut=uy,yt=iu..... 

ссылка: Mysql site

1
  1. ли идентификаторы new_table и uploaded_tmp такие же? Если нет, удалите их из инструкции INSERT
  2. Вам нужен идентификатор, который будет таким же после обновления? Если не увидеть ответ David162795.
  3. Если вы не хотите, чтобы ваш PRIMARY ID был изменен, вы должны использовать INSERT INTO ... ON DUPLICATE KEY UPDATE. Но тогда мы должны знать ваши UNIQUE индексы

В этом примере есть PRIMARY ключ (ID) и UNIQUE индекс (last_name, first_name)

INSERT INTO new_table (
    last_name, 
    first_name, 
    val1, 
    val2, 
    ... 
) 
SELECT 
    last_name, 
    first_name, 
    val1, 
    val2, 
FROM uploaded_tmp 
ON DUPLICATE KEY UPDATE 
    val1 = VALUES(val1), 
    val2 = VALUES(val2)