mysql - 我可以获得所有更新行的 ID 吗?

标签 mysql

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

有什么简单的方法可以让 MySQL 告诉我它刚刚更新的行的 ID?

我知道我可以执行另一个 SELECT 查询来查找与 INSERT 语句使用的约束相同的约束,这并不难写,但如果 MySQL 能够跟踪我。

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

最佳答案

检查此链接一次

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

它说

If a table contains an AUTO_INCREMENT column and INSERT ... UPDATE inserts a row, the LAST_INSERT_ID() function returns the AUTO_INCREMENT value. If the statement updates a row instead, LAST_INSERT_ID() is not meaningful. However, you can work around this by using LAST_INSERT_ID(expr). Suppose that id is the AUTO_INCREMENT column.

要使 LAST_INSERT_ID() 对更新有意义,请按如下方式插入行:

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

关于mysql - 我可以获得所有更新行的 ID 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6630191/

相关文章:

mysql - 如何在 MySql 中的任何字符串匹配后检索数据?

mysql - 是否可以将查询的输出拆分为每个月的单独列?

php - 带有准备好的语句的execute() 出现异常

mysql - 尝试插入后出现空白页

mySQL 每月清理一次数据库

c++ - Mysql json二进制编码

mysql - 围绕将 2 种不同类型的 ID 与一条信息相关联的 SQL 模式设计问题

php - 在php中检查密码确认

mysql - 尝试从 docker 容器连接到本地 mysql 数据库时连接被拒绝

sql - 有什么方法可以优化这个 MySQL 查询吗?