INSERT ... ON DUPLICATE KEY UPDATE

时间:2012-09-10 11:02:05

标签: mysql insert-update

我正在使用API​​从其他服务器获取记录并插入到我的本地数据库中,但是当某个特定字段说apiserverID重复时,我只想更新字段。 我的问题是我有表结构

  • myPrimaryKey
  • apiserverID
  • ....
  • .....
  • .....
  • updateDate

现在我希望简单的过程在apiserverID重复时更新行。 我知道的唯一解决方案是我必须检查(SELECT)密钥apiserverID是否存在然后更新else插入。 但是我不希望在一次查询中进行编程

编辑:主要问题是INSERT ... ON DUPLICATE KEY UPDATE对特定字段不起作用,它包括检查双重性的所有键

1 个答案:

答案 0 :(得分:3)

如果表上有一个多列唯一索引,则更新会使用(似乎使用)更新查询中的所有列(唯一索引)。

因此,如果示例中的表上存在UNIQUE(a,b)约束,则INSERT等效于此UPDATE语句:

UPDATE table SET c=c+1 WHERE a=1 AND b=2;

(而不是“a = 1或b = 2”)

但是在你的情况下,它会按预期工作,因为第一个是你的主键,它永远不会与服务器重复,所以只有你可以重复的是你的apiserverID所以当发现重复时它会更新其他行总是会执行一个新的插入