Php 在重复键上插入新行,而不是更新

Php 在重复键上插入新行,而不是更新,php,mysql,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 m

我有个小问题

这是我得到的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
问题是,它总是插入新行,而不是更新现有行。
是因为我需要将“匹配id”设置为
AUTO\u INCREMENT
还是其他任何内容(目前,我的“id”字段是
AUTO\u INCREMENT

AUTO\u INCREMENT
与此无关。但是需要一把钥匙。更具体地说,是唯一键,例如主键或唯一索引

给定列名,我怀疑
match\u id
不能作为主键


更新:您还编写了一组复杂的
案例。。。结束
构造。请查看该函数。

自动增量与此无关。但是需要一把钥匙。更具体地说,是唯一键,例如主键或唯一索引

给定列名,我怀疑
match\u id
不能作为主键


更新:您还编写了一组复杂的
案例。。。结束
构造。查看该函数。

您正在告诉数据库更新“关于重复密钥”的信息;如果其他字段都不是唯一键,则数据库将插入新行


您可以在此查询之前选择
id
(或使其成为子查询),或者向该表添加另一个键,从而为每一行生成唯一的值。我不知道您的模式,但您可以创建一个多部分密钥,它跨越
匹配id
联盟id

您正在告诉数据库更新“关于重复密钥”的信息;如果其他字段都不是唯一键,则数据库将插入新行


您可以在此查询之前选择
id
(或使其成为子查询),或者向该表添加另一个键,从而为每一行生成唯一的值。我不知道您的模式,但您可能可以创建一个跨
match\u id
league\u id
的多部分键,表定义是什么?它可能缺少相应的索引。您也可以使用
替换为
:这是我的“match_id”结构,调用应该在()之后检查它-不知道我是否缺少什么there@SimonThomsen,那可不像钥匙。如果没有定义键,则永远不会有重复键。@BartFriederichs被替换为一个更好的解决方案,而不是重复键?表定义是什么?它可能缺少相应的索引。您也可以使用
替换为
:这是我的“match_id”结构,调用应该在()之后检查它-不知道我是否缺少什么there@SimonThomsen,那可不像钥匙。如果您没有定义任何键,则永远不会有重复键。@BartFriederichs被替换为使用重复键的更好解决方案?