我可以从批量插入中检索lastInsertId吗?

时间:2009-09-17 17:53:54

标签: php sql mysql

INSERT INTO details (idactivity,user,hours,val,date) VALUES ('981','133','0','10500','2008-07-01'),('981','184','0','2750','2008-07-01'),('981','184','0','2750','2008-07-01')

(iddetails as details table PK)

有没有办法获得3个新的iddetails并让它们进入下一个批量插入查询?

INSERT INTO activity (idactivity,iddetails) VALUES('981',??),('981',??),('981',??)

6 个答案:

答案 0 :(得分:6)

MySQL手册中有behavior of last_insert_id() with multi-row insert statements的详细讨论。向下滚动一下,红色垂直条以“重要”字样开头。

答案 1 :(得分:3)

我认为你必须一次做一个初始插入。 MySQL的last_insert_id只会为您提供插入的第一个元素的id,其中包含多行插入语句。如果您有多个进程同时插入行,则可能会出现问题。

但是,(我还没有验证过),如果你使用InnoDB表,那么语句应该在隐式事务中执行,所以你应该能够假设生成的id是顺序的。

另一种方法,如果你有事务,就是锁定表,并手动更新它的AUTO_INCREMENT属性。例如,如果要插入50行,则将其加50,然后解锁表,并使用您保留的ID显式插入行。您将需要转换(或至少是表锁),以便您不读取AUTO_INCREMENT,然后让某人在更新之前插入新行。

答案 2 :(得分:2)

据我所知,不在mysql

答案 3 :(得分:0)

如果您使用的是日期时间而不是日期,则可以根据用户和日期时间值查找插入的ID,但它可能更好,因此如果您需要该数据,则不要进行批量插入。否则你最终会运行更多的查询。

答案 4 :(得分:0)

您可以为GUID添加数据库字段,并为每条记录存储随机数据字段。然后另一个查询可以提取ID

答案 5 :(得分:-2)

使用SELECT last_insert_id();查询您可以获取最后插入的ID。