gpt4 book ai didi

mysql - 如何检测 "insert ignore"语句中插入的 id?

转载 作者:行者123 更新时间:2023-11-30 00:16:10 26 4
gpt4 key购买 nike

现在,当“重复 key 更新”时,不执行任何操作。所以,

INSERT IGNORE INTO t1 c1 VALUES(...,...,...);

last_insert_id 最多只有一个 id。

那么如何在“insertignore”语句中检测多个插入的id?

最佳答案

使用 LAST_INSERT_ID()

我不可能知道常规批量 INSERT 可以返回多个 LAST_INSERT_ID()。它将始终返回为批量 INSERT 语句插入的第一条记录的 ID。

您可以查看相关文档,其中解释了 here

The ID that was generated is maintained in the server on a per-connection basis. This means that the value returned by the function to a given client is the first AUTO_INCREMENT value generated for most recent statement affecting an AUTO_INCREMENT column by that client.

强调为影响 AUTO_INCREMENT 列的最新语句生成的第一个 AUTO_INCRMENT 值。因此,如上所述,通过批量 INSERT 插入的第一个成功行将是 LAST_INSERT_ID() 的返回值。

在 InnoDB 中使用 LAST_INSERT_ID() 和 ROW_COUNT()

有一个替代解决方案 as posted by Dag Sondre Hansen here这可能适合您的需求。但它确实假设您的表/数据库使用 InnoDB。

If you are using InnoDB on a recent version of MySQL, you can get the list of IDs using LAST_INSERT_ID() and ROW_COUNT().

InnoDB guarantees sequential numbers for AUTO INCREMENT when doing bulk inserts, provided innodb_autoinc_lock_mode is set to 0 (traditional) or 1 (consecutive). Consequently you can get the first ID from LAST_INSERT_ID() and the last by adding ROW_COUNT()-1.

只需确保在 INSERT 语句之后直接在同一个连接上执行此操作,否则您将无法获得预期的结果。

关于mysql - 如何检测 "insert ignore"语句中插入的 id?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23644201/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com