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')
(см. таблицу деталей PK)
Есть ли способ получить 3 новых iddetails и отправить их в следующий объемный запрос на вставку?
INSERT INTO activity (idactivity,iddetails) VALUES('981',??),('981',??),('981',??)
Насколько я знаю, не в mysql
.
Подробное обсуждение поведения last_insert_id () с инструкциями вставки нескольких строк в руководстве MySQL. Прокрутите вниз немного до части с красной вертикальной полосой, начинающейся со слова «важно».
Я думаю, вам нужно делать первые вставки по одному. MySQL last_insert_id просто предоставит вам идентификатор первого элемента, который вы вставляете с помощью инструкции с несколькими строками вставки. Могут возникнуть проблемы, если у вас есть несколько строк вставки процесса одновременно.
Однако (и я не проверял это), если вы используете таблицы InnoDB, то оператор должен выполняться в неявной транзакции, поэтому вы должны быть уверены, что генерируемые идентификаторы были последовательными.
Другим способом, опять же, если у вас есть транзакции, является блокировка таблицы и обновление ее свойства AUTO_INCREMENT вручную. Если у вас есть 50 строк для вставки, например, затем поднимите его на 50. Затем откройте таблицу и вставьте свои строки, явно используя идентификаторы, которые вы зарезервировали. Вам понадобятся трансакции для этого (или, по крайней мере, блокировки таблиц), чтобы вы не читали AUTO_INCREMENT, а затем попросите кого-нибудь вставить новую строку перед ее обновлением.
Если вы использовали дату-время, а не только дату, вы можете найти вставленный идентификатор на основе значений пользователя и значений даты и времени, но, вероятно, лучше, поэтому просто не делайте объемную вставку, если вам нужны эти данные. В противном случае вы все равно запускаете больше запросов.
вы можете добавить поле базы данных для GUID и сохранить случайную запись с каждой записью. то другой запрос может извлечь идентификаторы
Использование SELECT last_insert_id (); запрос, вы можете получить последний вставленный идентификатор.