Я уже рассмотрел другие ответы, и я до сих пор считаю, что мой вопрос уместен и заслуживает отдельной записи.
У меня есть таблица с именем settings (которая хранит пользовательские настройки), и мне нужно вставить несколько настроек для каждого пользователя. Первоначально я выполнил отдельный оператор insert для каждого параметра, но, почувствовав, что это не очень хороший способ сделать это, я подумал о вставке нескольких строк одним и тем же вложением. Моя единственная проблема заключается в том, что мне нужны идентификаторы auto_incremented каждой из вновь вставленных строк.
Я прочитал ответы, которые говорят, что это невозможно/масштабируемо и т.д., но я чувствую, что я ударил по решению. Мне нужна обратная связь, правильный ли мой способ или нет, и, следовательно, этот вопрос.
То, что я сделал, просто. После ввода нескольких строк я вызываю last_insert_id(), чтобы получить идентификатор первой строки одновременно вставленных строк. У меня уже есть счетчик числа вставленных строк, поэтому я просто создаю новый массив и заполняю его идентификаторами, начинающимися с last_insert_id() и заканчивая last_insert_id() + n-1 (где n - количество вставленных строк).
Я чувствую, что это будет работать по следующим причинам:
1.) Документация MYSQL гласит, что last_insert_id() зависит от соединения, и если другой клиент/соединение вставляет новые записи, то это не повлияет на другой клиент last_insert_id().
2.) Я чувствую, что, когда вставка выполняется с помощью одного оператора SQL, вся вставка должна рассматриваться как одна транзакция. Если это так, то должны применяться правила ACID, а значения auto_incremented должны быть последовательными. Я не уверен в этом.
Это мои причины, по которым я чувствую, что логика должна работать. Итак, мой вопрос заключается в том, будет ли приведенная выше логика работать для ВСЕХ условий? Могу ли я полагаться на это, чтобы работать правильно во всех ситуациях? Я знаю, что он работает для меня в настоящее время.