我想在表格中插入一些数据
(id PK autoincrement, val)
使用多插入
INSERT INTO tab (val) VALUES (1), (2), (3)
是否可以获得最后插入的 id 表?
我问是因为我不确定是否所有人都会以这种形式出现:(n,n+1,n+2)。
我使用mysql inodb。
来自mysql 文档:
如果使用单个 INSERT 语句插入多行,则 LAST_INSERT_ID() 仅返回为第一个插入行生成的值。这样做的原因是可以轻松地针对其他服务器重现相同的 INSERT 语句。
这里有人在 mysql 论坛上问同样的问题,但没有给出真正权威的答案。他们降落在'为了安全起见,首先锁定桌子。然后你可以算入连续的 id。
我的建议是这样的:
如果您要插入许多行并且不介意阻塞其他线程,请锁定表,执行插入,然后解锁。由于表被锁定,您可以指望插入的 id 是连续的(或任何您的自动增量设置)。
如果您正在进行少量插入或不想阻塞其他线程,只需一次插入一个,然后在每个插入后调用 last_insert_id() 。