0

我有一个小问题。

这是我得到的 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

4

2 回答 2

4

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

鉴于列名,我怀疑它match_id不是主键。

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

于 2013-01-15T15:44:29.900 回答
0

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

您可以id在此查询之前选择(或使其成为子查询)或向该表添加另一个键,这将为每一行生成一个唯一值。我不知道您的架构,但您也许可以创建一个跨度match_idleague_id.

于 2013-01-15T15:47:20.457 回答