2013-01-15 78 views
0

我有一點問題。ON DUPLICATE KEY插入新行而不是更新

這是SQL代碼我得到:

INSERT INTO matches (match_id, league_name, league_id, test_one) 
VALUES (866860, 'Portugal',1,'testing') 
ON DUPLICATE KEY 
UPDATE league_name = 
    CASE match_id 
    WHEN 866860 
     THEN 'Portugal' END, 
league_id = 
    CASE match_id 
    WHEN 866860 
     THEN 1 END, 
test_one = 
    CASE match_id 
    WHEN 866860 
     THEN 'testing' END 

的問題是,它總是插入新行,而不是更新現有的。 是不是因爲我需要讓「match_id」爲AUTO_INCREMENT或其他任何東西(的那一刻,我的「ID」字段是AUTO_INCREMENT

+2

什麼是表格定義?它可能缺少適當的索引。 – ethrbunny

+1

你也可以使用'REPLACE INTO':http://dev.mysql.com/doc/refman/5.0/en/replace.html –

+0

這裏是我的結構「match_id」,呼叫應該檢查(http:///d.pr/i/XF6Q) - 不知道我是否錯過了那裏的東西 –

回答

4

AUTO_INCREMENT在這裏無關緊要。但ON DUPLICATE KEY需要一個密鑰。更具體地說,一個唯一的鍵,如主鍵或唯一索引。

鑑於列名,我懷疑match_id未能成爲主鍵。

更新:您還寫了一組複雜的CASE ... END構造。看看VALUES()函數。

+0

感謝!我錯過了我的領域的獨特索引 –

0

您正在告訴您的數據庫更新信息「ON DUPLICATE KEY」;如果其他字段都不是UNIQUE鍵,則數據庫將插入一個新行。

您可以在此查詢(或使其成爲子查詢)之前選擇id或向此表中添加另一個鍵,這將導致每行的唯一值。我不知道您的架構,但是您可能可以創建跨越match_idleague_id的多部分密鑰。

相關問題