在插入中立即使用自动增量值

Posted

技术标签:

【中文标题】在插入中立即使用自动增量值【英文标题】:Instantly using auto-increment value in insert 【发布时间】:2014-03-12 20:02:25 【问题描述】:

这是一个困扰我很久的问题。假设我有一个包含两列的表(idfile)。有没有办法在插入查询中立即使用自动递增的 id?像这样:

INSERT INTO `sometable` (`file`) VALUES (CONCAT(id, '-somename.ext'));

但这会导致file 成为“0-somename.ext”。

当然,我可以在插入后立即进行更新并在那里使用 id。但我只是想知道是否有任何方法可以在一次快速插入中做到这一点。

更新

我正在寻找一种即使表为空或之前没有进行其他插入也能正常工作的解决方案。 LAST_INSERT_ID() + 1 不起作用,因为如果在第一次插入时使用它会返回 0(即使表不为空)。如果之前插入到另一个表,它会完全返回错误的 id。

为什么这个问题没有标准解决方案?

【问题讨论】:

【参考方案1】:
create table test (id int AUTO_INCREMENT, tx text, PRIMARY KEY (id));

insert into test(tx) values ('first');

insert into test(tx) values(concat( LAST_INSERT_ID() +1, 'blabla'));

insert into test(tx) values(concat( LAST_INSERT_ID() +1, 'blabla'));

insert into test(tx) values(concat( LAST_INSERT_ID() +1, 'blabla'));

【讨论】:

以上是关于在插入中立即使用自动增量值的主要内容,如果未能解决你的问题,请参考以下文章

SQL - 插入并捕获 id 自动增量值

在 Scala 中使用 Slick 库获取自动增量值

C#获取mysql自动增量值[重复]

如何在单个查询(sql server)中插入1条记录后检索自动增量值

在 MySQL 中,如何在 INSERT 时使用另一列中的自动增量值?

如何通过 SQL 插入增量值