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',??)
答案 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。