我想使用单个INSERT语句将多行插入表中.这没有问题,因为SQL提供了为单个INSERT语句提供多行作为参数的选项.现在,这些行包含一个ID自动递增的字段,即它的值由数据库设置,而不是由我的代码设置.
因此,我想获取ID插入行的值.我的基本问题是:我如何为MariaDB/MySQL做到这一点?
事实证明,这是相当简单的,例如,在PostgreSQL中,作为PostgreSQL有所述RETURNING用于子句INSERT它返回一个或甚至为多个行所需的值.这正是我想要的,它的工作原理.
不幸的是,MariaDB的也有MySQL的PostgreSQL的RETURNING条款,所以我需要退回到的东西,例如LAST_INSERT_ID(),但这只能返回ID单一最后插入行的,即使使用单个插入多行INSERT.我如何获得所有ID价值?
我的代码目前看起来像这样:
INSERT INTO mytable
(foo, bar)
VALUES
('fooA', 'barA'),
('fooB', 'barB');
SELECT LAST_INSERT_ID() AS id;
Run Code Online (Sandbox Code Playgroud)
如何解决此问题的方式即使在并发写入时也能正常工作?
(不,它不是更改为UUID栏中选择一个选项,或者是这样的;自动递增场,并给出了不能更改.)
MySQL和MariaDB具有该LAST_INSERT_ID()函数,它返回当前会话中最新INSERT语句生成的id.
但是当您的INSERT语句插入多行时,LAST_INSERT_ID()返回生成的集合中的第一个 id.
在这样一批多行中,您可以依赖后续的id连续.例如,MySQL JDBC驱动程序依赖于此.
如果您插入的行包含id列的NULL和非NULL值的混合,则存在弄乱此假设的风险.JDBC驱动程序为生成的id集返回错误的值.
| 归档时间: |
|
| 查看次数: |
1677 次 |
| 最近记录: |