Получить все вставленные идентификаторы при вставке нескольких строк с помощью одного запроса

Я уже посмотрел другие ответы, и я все еще чувствую, что мой вопрос актуален и заслуживает отдельной записи.

У меня есть таблица с именем settings (в которой хранятся настройки пользователя), и мне нужно вставить несколько настроек для каждого пользователя. Сначала я выполнил отдельную инструкцию вставки для каждого параметра, но почувствовал, что это не так.Особенно хороший способ сделать это, я подумал о вставке нескольких строк одним оператором вставки. Моя единственная проблема заключается в том, что мне нужны идентификаторы auto_incremented для каждой из вновь вставленных строк.

прочитал ответы, которые говорят, что это неЭто возможно / масштабируемо и т. д., но я чувствую, что нашел решение. Я хочу получить обратную связь независимо от того, правильный мой путь или нет, и, следовательно, этот вопрос.

Что я'мы сделали просто. После вставки нескольких строк я вызываю last_insert_id (), чтобы получить идентификатор первой строки одновременно вставленных строк. У меня уже есть счетчик количества вставленных строк, поэтому я просто создаю новый массив и заполняю его идентификаторами, начиная с last_insert_id () и заканчивая last_insert_id () + n-1 (где n - количество вставленных строк).

Я чувствую, что это будет работать по следующим причинам:

1.) Документация MYSQL гласит, что last_insert_id () зависит от соединения, и если другой клиент / соединение вставляет новые записи, то этоне влияет на другого клиентаs last_insert_id ().

2.) Мне кажется, что, поскольку вставка выполняется одним оператором SQL, вся вставка должна рассматриваться как одна транзакция. Если это так, то должны применяться правила ACID, а значения auto_incremented должны быть последовательными. Я'Я не уверен в этом.

Это мои причины, почему я чувствую, что логика должна работать. Итак, мой вопрос, будет ли вышеуказанная логика работать для ВСЕХ условий? Могу ли я рассчитывать на правильную работу во всех ситуациях? Я знаю, что это работает для меня в настоящее время.

Ответы на вопрос(7)

Ваш ответ на вопрос