如何在mysql中获得大容量插入插入id



我试图通过使用这个查询在mysql表中插入多行后获得insertedid

insert into sometable (id , candidateid , createdby)
values ('61','3175','1425'),('60','3175','1425'),('42','3175','1425'),('61','3176','1425'),('60','3176','1425'),('42','3176','1425') OUTPUT INSERTED.id

但是我得到sql语法错误

code: 'ER_PARSE_ERROR',
errno: 1064,
sqlMessage: "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OUTPUT INSERTED.id' at line 2",
sqlState: '42000',

如何获取插入id

OUTPUT INSERTED语法是Microsoft SQL Server的东西。MySQL不支持这种语法。

在您的示例中,您已经显式地设置了id值,因此不需要返回它们。只需从您自己的值中获取它们,这些值显然在执行INSERT之前已经知道了。

您可能依赖于INSERT过程中生成的自动递增的id。

要获取最近插入行的自动增量id,请在INSERT之后的单独查询中使用LAST_INSERT_ID()函数。

LAST_INSERT_ID()只返回插入过程中生成的第一个id。如果执行多行插入,则由您来推断后续的id。它们通常是连续的值。例如,MySQL JDBC驱动程序依赖于它们是连续的值,因此它可以在批处理插入后返回一组id。

但是它们不是保证是连续的值,如果你已经改变了innodb_autoinc_lock_mode=2,它在一个"交错"方式,因此并发插入可以从多行插入生成的集合之间的序列中获取值。这不是默认模式,所以您应该故意设置它。

最新更新