2012-03-12 64 views
3

這是否行得通? (我沒有獲得一個MySQL服務器來測試> <。)INSERT INTO值(...)具有多個值的重複鍵更新

MYTABLE:
身份識別碼:整數/主鍵
MYDATA:文本

INSERT INTO mytable VALUES (1,"new row"),(2,"brand new row"),(3,"yup another new row"), [.....more and more coma-separated parentheses with values], (1000,"guess what? yes new row") ON DUPLICATE KEY UPDATE mydata = "dang, this row already exists!"; 
+0

關鍵是什麼? ID是主鍵?如果是這樣,你可以在查詢中得到重複嗎? ON DUPLICATE KEY僅適用於唯一值或組合鍵 – Odinn 2012-03-12 15:00:30

+0

是「myid」是主鍵。只是假設表中已經有一些行了 – Sharky 2012-03-12 15:07:29

回答

4

是的,它會工作,但它是明智的首先明確命名的列:

INSERT INTO mytable 
    (myid, mydata) 
    VALUES (1,"new row"),(2,"brand new row"),(3,"yup another new row") 

而且,單引號多一點語法便攜,但MySQL將正確地處理它們。

VALUES (1,'new row'),(2,'brand new row'),(3,'yup another new row') 

注意,如果你已經在mytable值,你可能會遇到主鍵衝突的id。您需要決定在這種情況下應採取的行動,並相應地應用ON DUPLICATE KEY

+0

謝謝你的回答Michael! (我會盡快接受) – Sharky 2012-03-12 15:00:51

2

我不明白爲什麼不能:

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] 
    [INTO] tbl_name [(col_name,...)] 
    {VALUES | VALUE} ({expr | DEFAULT},...),(...),... 
    [ ON DUPLICATE KEY UPDATE 
     col_name=expr 
     [, col_name=expr] ... ] 
http://dev.mysql.com/doc/refman/5.5/en/insert.html

。還有一個例子here

INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6) 
    ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b); 
+0

謝謝你的回答和文件Eder先生! (雖然邁克爾有點快)) – Sharky 2012-03-12 15:01:26

0

是的。但是,如果你運行的是真正的大型SQL語句 - 小心點擊最大SQL大小(默認爲1Mb,我認爲),當點擊這個長度時,你可能會開始得到一些奇怪的mysql錯誤

+0

是的,這是正確的。如果我沒有記錯,它是max_packet_size或max_allowed_pa​​cket ... – Sharky 2012-03-12 15:05:23