php - 从 MySQL 中的多插入获取 LAST_INSERT_ID()
问题描述
在我的 MySQL 数据库中插入多行后,我需要获取我的 id 值
INSERT INTO table (`row1`, `row2`, `row3`, `row4`)
VALUES
('value1','value2','value3','value4'),
('value1','value2','value3','value4');
事实上,我需要类似 SQL Server - INSERT 之后的返回值, 但对于 MySQL,我不需要返回最后一个 id,因为我可以自己做,但我认为这对我所做的事情没有好处是更好的方法我的问题存在吗?
解决方案
如果要将行块插入父表和子表中,则行必须具有唯一列,以便在插入后查找父行:
INSERT INTO table (col1, col2, col3, col4)
VALUES
('value1','value2','value3','value4'),
('value5','value6','value7','value8');
INSERT INTO childtable (colx, coly, id_table)
SELECT 1, 2, id FROM table WHERE col1 = 'value1' and col2 = 'value2' and col3 = 'value3' and col4 = 'value4'
UNION ALL
SELECT 1, 2, id FROM table WHERE col1 = 'value5' and col2 = 'value2' and col3 = 'value3' and col4 = 'value4'
即使有一种方法可以获取所有插入的 ID,您也必须做同样的事情,因为表包含一组无序的行。如果您为第一个插入语句返回 ID 11 和 12,那么 ID 11 将引用哪一行以及 ID 12 是哪一行?没有办法说出来,因为 DBMS 可以自由地以任何顺序插入行。
如果行数据不像您的示例那样是唯一的,其中两行都包含 ('value1','value2','value3','value4'),那么您必须将所有数据插入循环中或使用一些 CTE首先对行编号并使用这些数字。
无论如何,说了这么多,我会在一个循环中逐行插入数据(即一个父级,它的所有子级,下一个父级,...),只要您不会遇到无法忍受的性能问题。
推荐阅读
- html - Django 表单未提交 - 表单标签问题
- excel - 如何在单元格中的最后一个字符之前插入分号
- spring - 为什么我的 spring-cloud-stream 测试配置也在另一个类中启动 rabbitMQ 侦听器?
- excel - X++ SysExcelWorkbook.saveAs - 更改编码
- macos - 配置:错误:无法运行 C 编译程序。安装 libtools-2.4.2 时
- android - 如何找到连接到我手机 BT-PAN 的设备发出的 IP 地址
- python - 熊猫在使用 read_csv 时添加小数点
- c - 防止传递不兼容的指针类型
- mysql - Mysql NodeJs 同步查询
- javascript - 使用守夜人无法按 Enter