Задать вопрос
@koliane

Можно ли получить id вставленных элементов в mysql?

Использую mysqli в php.
При вставке одной записи командой insert, можно получить id вставленной записи.
Если же командой insert вставлять несколько записей, то получаю все равно один id первой вставленной записи.
Можно ли получить id сразу всех вставленных записей командой insert в mysql?
  • Вопрос задан
  • 1933 просмотра
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 3
Immortal_pony
@Immortal_pony Куратор тега MySQL
Для InnoDB (движок гарантирует последовательную вставку для полей с AUTO_INCREMENT):
1. Выставить настройку innodb_autoinc_lock_mode=1 (по умолчанию)
2. Cделать INSERT.
3. Получить LAST_INSERT_ID().
4. Получить ROW_COUNT().
5. Сгенерировать id записей на основании двух предыдущих пунктов.

Для всех:
1. Добавить поле "batch_id" с индексацией по нему.
2. При подготовке данных всем элементам пачки поставить сгенерированный batch_id
3. После INSERT сделать SELECT по bacth_id
Ответ написан
Комментировать
@iljaGolubev
Без дополнительных запросов - нет.
Ответ написан
alekciy
@alekciy
Вёбных дел мастер
Одна из причин по которой лично я перешел на Postgresql. Там есть RETURNING который может вернуть любое поле из вставленной строки, не только ID. Если нет ни каких специфичных кейсов использовать РСУБД, то переход получается простой.

Касательно контексте задачи. Предположу, что нужно фронту/клиенту получить идентификаторы вставляемых записей. Но решить указанную проблему можно зайдя с другой стороны. Идентификаторы генерировать на клиенте (т.е. условый ID записей известны уже ДО вставки в базу). В качестве такого идентификатора лучше использовать UUID реализация которого есть абсолютно во всех популярных языках.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы