0

我正在考虑将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;
4

2 回答 2

0

你不能用 MySQL 中的一条语句来做到这一点。SELECT语句返回现有值;数据修改语句(包括INSERT)不返回数据。(它们通常返回某种计数。)这包括INSERT...ON DUPLICATE KEY UPDATE语句——它不返回数据。

您可能可以使用存储过程来做您想做的事情,但是该过程将包含多个语句。如果这对您不起作用,请按照@Explosion Pills 的建议SELECT进行操作,并在需要时使用INSERT.

于 2013-05-08T22:00:01.423 回答
0

相反,您可以只SELECT使用唯一 ID 来确定它是否存在。如果是这样,只需将其退回。否则,执行INSERT并返回新 ID。

于 2013-05-08T21:56:16.457 回答