2014-11-03 24 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 2014-11-03 10:18:04

+0

或更好的「UPSERT」,http://stackoverflow.com/questions/6107752/how-to-perform-an-upsert-so-that-i-can-use-both-new-and-old -value-in-update-par – matcheek 2014-11-03 10:18:35

回答

1

有一個稱爲一個很好的功能REPLACE

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

它的行爲就像INSERT,但是如果重複鍵情況(主要或唯一的),舊的記錄將被刪除,並用新值取代。

感興趣嗎?瞭解更多關於http://dev.mysql.com/doc/refman/5.7/en/replace.html

+0

這是錯誤的。它總是一個插入。舊數據集將被刪除並插入一個新數據集。因此,如果您在'PRIMARY'上使用'AUTO_INCREMENT',則會有一個新增的ID。 – BreyndotEchse 2014-11-03 16:40:51

+0

只要主鍵被替換,它也是一樣的。如果主鍵不包含在替換數據中,是的,它會得到新的索引,我應該更新我的答案。 – David162795 2014-11-03 16:47:16

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_tableuploaded_tmp一樣嗎?如果沒有,請將它們從INSERT語句中刪除
  2. 更新後需要的ID是否相同?如果沒有看到David162795的答案。
  3. 如果你不想讓你的PRIMARY ID改變,你必須使用INSERT INTO ... ON DUPLICATE KEY UPDATE。但是,我們必須知道你的UNIQUE指數

在這個例子中有一個PRIMARY鍵(ID)和UNIQUE指數(last_namefirst_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) 
相關問題