正确使用INSERT .... ON DUPLICATE KEY UPDATE

时间:2013-05-08 21:53:32

标签: mysql

我正在考虑将INSERT ON DUPLICATE KEY UPDATE用于我的应用程序,该应用程序通常必须在一个事务中向数据库提交许多行。但是我对一件事情感到有些困惑。在线使用示例似乎在其功能的变体中有很多。

我正在寻找的行为是我要插入行,如果它在唯一索引中不存在,但如果它确实存在,我只想返回ID但不更新任何内容。我是否正确地假设这是此声明的预期功能。

此外,我不想在我的表中创建虚拟字段来使用此功能,如许多示例中所示。在我看来,这只是不好的做法。

非常感谢任何建议。下面是mysql网站上的一个示例,它说明了我想要的内容,但c = 3部分没有在其上解释。我想知道是否需要这样才能使last_insert_id真正起作用或者它只是它们的一部分。我已经读过,在last_insert_id部分之后没有一些虚拟操作,那么last_insert_id将不起作用。

INSERT INTO table (a,b,c) VALUES (1,2,3)
  ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), c=3;

2 个答案:

答案 0 :(得分:0)

相反,您只需SELECT唯一ID即可确定其是否存在。如果是的话,就回来吧。否则,请执行INSERT并返回新ID。

答案 1 :(得分:0)

你无法在MySQL中使用单个语句执行此操作。 SELECT语句返回现有值;数据修改语句(包括INSERT)不返回数据。 (它们通常返回某种计数。)这包括INSERT...ON DUPLICATE KEY UPDATE语句 - 它不返回数据。

您可以使用存储过程执行所需操作,但该过程将包含多个语句。如果这对您不起作用,那么请按@Explosion Pills建议并使用SELECT,如果需要,使用INSERT