我试图通过使用这个查询在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
,它在一个"交错"方式,因此并发插入可以从多行插入生成的集合之间的序列中获取值。这不是默认模式,所以您应该故意设置它。