我可以获取所有更新行的ID吗?

时间:2011-07-08 20:33:57

标签: mysql

假设我在MySQL中执行INSERT / ON DUPLICATE KEY UPDATE,它会更新一堆行。并且该表具有自动增量主键。

有没有简单的方法让MySQL告诉我刚更新的行的ID?

我知道我可以执行另一个SELECT查询,查找INSERT语句使用的相同约束,并且这并不难写,但是如果MySQL可以跟踪ID,可能会更有效率我

我在手册中看到了关于LAST_INSERT_ID的技巧,其中有一个插入/更新的行,但我想知道你要更新多行的情况。

2 个答案:

答案 0 :(得分:2)

检查此链接一次

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

它说

  

如果表包含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;

答案 1 :(得分:0)

除了使用“Select for Update”(保持行被锁定)之外,除非你使用“Select for Update”,否则你甚至不能保证你的后续Select会选择你刚刚更新的SAME行,所以即使是第二次读取也不是万无一失的。<登记/> 触发器在MYSQL中效率相当低,但如果您确实需要这样做,请在相关表上创建触发器[用于更新,插入],并将修改后的行的ID插入另一个表中。您需要存储connection_id() (当前会话),以便您可以将由另一个会话上的语句插入的行分开。