我想在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
我如何指示與新的值更新值?
我想在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
我如何指示與新的值更新值?
有一個稱爲一個很好的功能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
這是錯誤的。它總是一個插入。舊數據集將被刪除並插入一個新數據集。因此,如果您在'PRIMARY'上使用'AUTO_INCREMENT',則會有一個新增的ID。 – BreyndotEchse 2014-11-03 16:40:51
只要主鍵被替換,它也是一樣的。如果主鍵不包含在替換數據中,是的,它會得到新的索引,我應該更新我的答案。 – David162795 2014-11-03 16:47:16
你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
new_table
和uploaded_tmp
一樣嗎?如果沒有,請將它們從INSERT語句中刪除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)
您使用'UPDATE'更新,和' INSERT'插入 – zerkms 2014-11-03 10:18:04
或更好的「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