mysql - 获取多个插入行的 id
问题描述
我需要通过单个查询获取插入的新 ID 列表(这些是自动增量的,我正在制作一个
INSERT INTO xtable(value1,value2,value3,value4) VALUES
(val1,val2,val3,val4),
(val1,val2,val3,val4),
(val1,val2,val3,val4),
(val1,val2,val3,val4),
(val1,val2,val3,val4)
因此,正如您在插入 5 行的单个查询中看到的那样,我怎样才能获得这些 ID?我不想在插入查询后进行选择以获取最新的 IDS 或范围,因为如果它变慢并且另一个功能也会进行插入查询,它可能会出错,有任何方法可以在同一个查询 INSERT 中返回插入的 ID行?谢谢!
解决方案
MySQL 文档页面:https ://dev.mysql.com/doc/refman/5.7/en/example-auto-increment.html说:
对于多行插入,LAST_INSERT_ID() 和 mysql_insert_id() 实际上从插入的第一行返回 AUTO_INCREMENT 键。这使得多行插入能够在复制设置中的其他服务器上正确复制。
因此,如果您有第一个的 ID - 我希望按顺序为每条记录分配下一个更大的值,因为多行插入将在单个原子事务中完成。因此,如果您知道第一个 ID,您只需递增 id 以依次获取分配给每一行的值。例如,如果您有 4 行并且第一行的 ID 为 45,那么其余的将被分配 46、47、48。
然后,您可能还想参考此文档页面,该页面描述了更多内容并提供了有关如何使用 LAST_INSERT_ID() 的示例。 https://dev.mysql.com/doc/refman/5.7/en/information-functions.html#function_last-insert-id
推荐阅读
- math - 布尔代数中两个数字相减的主要问题
- azure - Azure 流分析仅在特定设备发送更新时加入
- html - 为什么我的引导卡没有并排显示?
- ansible - 通过 set_fact 分配的一些浮点数被转换为字符串
- node.js - Node 中的 Twilio API 引发关于用户代理的错误
- python - 按名称对数据进行分组,计数并制作饼图
- system-verilog - 意外的令牌'endpackage'
- sql - CTE - '.' 附近的语法不正确
- smtp - 如何使用 BizTalk SMTP 适配器设置回复标头?
- postgresql - 从 Linux 到 Windows 的 SymmetricDS 注册