我有点问题。
这是我得到的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
)
答案 0 :(得分:4)
AUTO_INCREMENT
在这里无关紧要。但是ON DUPLICATE KEY需要一把钥匙。更具体地说,是一个唯一键,例如主键或唯一索引。
鉴于列名,我怀疑match_id
无法成为主键。
更新:您还会编写一组复杂的CASE ... END
构造。看看VALUES()函数。
答案 1 :(得分:0)
您告诉您的数据库更新“ON DUPLICATE KEY”信息;如果其他任何字段都不是UNIQUE键,则数据库将插入一个新行。
您可以在此查询之前选择id
(或使其成为子查询),也可以在此表中添加另一个键,这将导致每行的唯一值。我不了解您的架构,但您可以创建跨多个match_id
和league_id
的多部分密钥。