4

我想在表格中插入一些数据

(id PK autoincrement, val)

使用多插入

INSERT INTO tab (val) VALUES (1), (2), (3) 

是否可以获得最后插入的 id 表?

我问是因为我不确定是否所有人都会以这种形式出现:(n,n+1,n+2)。

我使用mysql inodb。

4

2 回答 2

2

来自mysql 文档

如果使用单个 INSERT 语句插入多行,则 LAST_INSERT_ID() 仅返回为第一个插入行生成的值。这样做的原因是可以轻松地针对其他服务器重现相同的 INSERT 语句。

于 2010-05-21T14:50:04.037 回答
1

这里有人在 mysql 论坛上问同样的问题,但没有给出真正权威的答案。他们降落在'为了安全起见,首先锁定桌子。然后你可以算入连续的 id。

我的建议是这样的:

如果您要插入许多行并且不介意阻塞其他线程,请锁定表,执行插入,然后解锁。由于表被锁定,您可以指望插入的 id 是连续的(或任何您的自动增量设置)。

如果您正在进行少量插入或不想阻塞其他线程,只需一次插入一个,然后在每个插入后调用 last_insert_id() 。

于 2010-05-21T15:03:04.707 回答