在使用此查询在 mysql 表中插入多行后,我试图获取 insertid
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
值,因此无需返回它们。只需从您自己的价值观中获取它们即可,而您在执行插入之前显然已经知道了这些价值观。您可能依赖于在插入期间生成的自动递增 ID。
要获取最近插入的行的自动增量ID,请使用LAST_INSERT_ID() 函数 在 INSERT 之后的单独查询中。
LAST_INSERT_ID() 仅返回插入期间生成的第一个 ID。如果您执行多行插入,则由您来推断后续 id。它们通常是连续值。例如,MySQL JDBC 驱动程序依赖于它们是连续值,因此它可以在批量插入后返回 id 集。
但是,如果您更改了
innodb_autoinc_lock_mode=2
,则它们不能保证是连续值,它以“交错”方式分配 auto-inc 值,因此并发插入可能会从序列中获取值在多行插入生成的集合之间。这不是默认模式,因此您可能会故意设置它。