2010-04-26 57 views
144

我有一個sql查詢,我想在單個查詢中插入多行。所以我用類似:MySQL在單個查詢中插入多行的重複鍵更新

$sql = "INSERT INTO beautiful (name, age) 
    VALUES 
    ('Helen', 24), 
    ('Katrina', 21), 
    ('Samia', 22), 
    ('Hui Ling', 25), 
    ('Yumie', 29)"; 

mysql_query($sql, $conn); 

問題是,當我執行此查詢,我要檢查是否唯一的密鑰(這是不是主鍵),對於如。 'name'在上面的例子中應該被檢查,如果這個'name'已經存在,那麼相應的整行應該被更新,否則插入。

例如,在下面例如,如果'卡特里娜'已經存在於數據庫中,則整個行,不管字段的數量如何,都應該被更新。再次,如果'Samia'不存在,則應該插入該行。

我想用的:

INSERT INTO beautiful (name, age) 
     VALUES 
     ('Helen', 24), 
     ('Katrina', 21), 
     ('Samia', 22), 
     ('Hui Ling', 25), 
     ('Yumie', 29) ON DUPLICATE KEY UPDATE 

這是陷阱。我陷入困境並困惑如何繼續。我有多行可以一次插入/更新。請給我方向。謝謝。

回答

338

使用關鍵字VALUES來引用新值(請參閱documentation)。

INSERT INTO beautiful (name, age) 
    VALUES 
    ('Helen', 24), 
    ('Katrina', 21), 
    ('Samia', 22), 
    ('Hui Ling', 25), 
    ('Yumie', 29) 
ON DUPLICATE KEY UPDATE 
    age = VALUES(age), 
    ... 
+6

謝謝。這正是我想要的....再次感謝... – Prashant 2010-04-27 05:10:34

+10

**美麗**,正是我所需要的。 *嘿,看看我在那裏做了什麼?* – 2015-08-05 05:43:08

+0

如果我們需要在UPDATE中包含一條IF語句,那麼每行有不同的條件會怎麼樣? – logic 2016-04-09 21:05:19

-1

您可以使用Replace而不是INSERT ... ON DUPLICATE KEY UPDATE。

+16

是的,但是使用REPLACE刪除舊行,然後插入新行。我想保留舊行以維護主要ID。 – Prashant 2010-04-26 15:21:10

+2

我沒有意識到保留舊的PK對你來說很重要......當然,REPLACE在這種情況下不起作用...... – a1ex07 2010-04-26 17:04:50

+0

如果你不關心PK,就像我的情況一樣,完美。 – MLeFevre 2014-09-11 10:02:09