2013-01-15 77 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的多部分密钥。

相关问题