Intereting Posts
Что означает = и означает в PHP? Сравнение значений массива с другими значениями из того же массива PHPMyAdmin – общее количество записей В PHP, как извлечь несколько адресов электронной почты из блока текста и поместить их в массив? Включить ошибки в браузере при разборе PHP-файлов php: используя DomDocument, когда я пытаюсь написать UTF-8, он записывает шестнадцатеричную нотацию Получить последнее слово из URL-адреса после косой черты в PHP ZF2 – Как изменить страницу ответов на ошибку / 404? Не только шаблон, но и установка новой модели ViewModel Лучший способ инициализировать (пустой) массив в PHP MD5 хэш отличается разные сеансы с URL-адресом URL-адреса и без-www PHP max_input_vars Рекомендации по проверке защищенных методов с помощью PHPUnit (на абстрактных классах) SQL ORDER BY с использованием подготовленных операторов В классе PHP5, когда вызывает вызов частного конструктора?

Могу ли я извлечь lastInsertId из объемной вставки?

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

Solutions Collecting From Web of "Могу ли я извлечь lastInsertId из объемной вставки?"

Насколько я знаю, не в mysql .

Подробное обсуждение поведения last_insert_id () с инструкциями вставки нескольких строк в руководстве MySQL. Прокрутите вниз немного до части с красной вертикальной полосой, начинающейся со слова «важно».

Я думаю, вам нужно делать первые вставки по одному. MySQL last_insert_id просто предоставит вам идентификатор первого элемента, который вы вставляете с помощью инструкции с несколькими строками вставки. Могут возникнуть проблемы, если у вас есть несколько строк вставки процесса одновременно.

Однако (и я не проверял это), если вы используете таблицы InnoDB, то оператор должен выполняться в неявной транзакции, поэтому вы должны быть уверены, что генерируемые идентификаторы были последовательными.

Другим способом, опять же, если у вас есть транзакции, является блокировка таблицы и обновление ее свойства AUTO_INCREMENT вручную. Если у вас есть 50 строк для вставки, например, затем поднимите его на 50. Затем откройте таблицу и вставьте свои строки, явно используя идентификаторы, которые вы зарезервировали. Вам понадобятся трансакции для этого (или, по крайней мере, блокировки таблиц), чтобы вы не читали AUTO_INCREMENT, а затем попросите кого-нибудь вставить новую строку перед ее обновлением.

Если вы использовали дату-время, а не только дату, вы можете найти вставленный идентификатор на основе значений пользователя и значений даты и времени, но, вероятно, лучше, поэтому просто не делайте объемную вставку, если вам нужны эти данные. В противном случае вы все равно запускаете больше запросов.

вы можете добавить поле базы данных для GUID и сохранить случайную запись с каждой записью. то другой запрос может извлечь идентификаторы

Использование SELECT last_insert_id (); запрос, вы можете получить последний вставленный идентификатор.