一尘不染

MySQL ON DUPLICATE KEY-最后插入ID?

mysql

我有以下查询:

INSERT INTO table (a) VALUES (0)
  ON DUPLICATE KEY UPDATE a=1

我想要插入或更新的ID。通常我运行第二个查询以获取此信息,因为我相信insert_id()仅返回“插入的” ID,而不返回更新的ID。

有没有一种方法可以在不运行两个查询的情况下进行INSERT / UPDATE和检索行ID?


阅读 221

收藏
2020-05-17

共1个答案

一尘不染

检出此页面:https
:
//web.archive.org/web/20150329004325/https : //dev.mysql.com/doc/refman/5.0/en/insert-on-
duplicate.html
在页面底部他们说明了如何通过将表达式传递给该MySQL函数来使LAST_INSERT_ID对更新有意义。

从MySQL文档示例中:

如果表包含AUTO_INCREMENT列,并且INSERT …
UPDATE插入一行,则LAST_INSERT_ID()函数将返回AUTO_INCREMENT值。如果该语句改为更新一行,则LAST_INSERT_ID()没有意义。但是,您可以通过使用LAST_INSERT_ID(expr)解决此问题。假设id是AUTO_INCREMENT列。为了使LAST_INSERT_ID()对于更新有意义,请按如下所示插入行:

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