我有以下查询:
INSERT INTO table (a) VALUES (0) ON DUPLICATE KEY UPDATE a=1
我想要插入或更新的ID。通常我运行第二个查询以获取此信息,因为我相信insert_id()仅返回“插入的” ID,而不返回更新的ID。
有没有一种方法可以在不运行两个查询的情况下进行INSERT / UPDATE和检索行ID?
检出此页面: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;