ON DUPLICATE KEY插入新行而不是更新

时间:2013-01-15 15:37:45

标签: php mysql

我有点问题。

这是我得到的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 个答案:

答案 0 :(得分:4)

AUTO_INCREMENT在这里无关紧要。但是ON DUPLICATE KEY需要一把钥匙。更具体地说,是一个唯一键,例如主键或唯一索引。

鉴于列名,我怀疑match_id无法成为主键。

更新:您还会编写一组复杂的CASE ... END构造。看看VALUES()函数。

答案 1 :(得分:0)

您告诉您的数据库更新“ON DUPLICATE KEY”信息;如果其他任何字段都不是UNIQUE键,则数据库将插入一个新行。

您可以在此查询之前选择id(或使其成为子查询),也可以在此表中添加另一个键,这将导致每行的唯一值。我不了解您的架构,但您可以创建跨多个match_idleague_id的多部分密钥。