Uzyskaj wszystkie wstawione identyfikatory podczas wstawiania wielu wierszy za pomocą pojedynczego zapytania

Sprawdziłem już inne odpowiedzi i nadal uważam, że moje pytanie jest istotne i zasługuje na osobny wpis.

Mam tabelę o nazwie ustawienia (która przechowuje ustawienia użytkownika) i muszę wstawić wiele ustawień dla każdego użytkownika. Początkowo wykonałem osobną instrukcję wstawiania dla każdego ustawienia, ale uważając, że nie jest to szczególnie dobry sposób, pomyślałem o wstawieniu wielu wierszy przy użyciu tej samej instrukcji insert. Moim jedynym problemem jest to, że chcę identyfikatory auto_incremented każdego z nowo wstawionych wierszy.

Przeczytałem odpowiedzi, które mówią, że nie jest to możliwe / skalowalne itd., Ale czuję, że trafiłem na rozwiązanie. Chcę informacji zwrotnej, czy moja droga jest poprawna, czy nie, i stąd to pytanie.

To, co zrobiłem, jest proste. Po wstawieniu wielu wierszy wywołuję last_insert_id (), aby uzyskać identyfikator pierwszego wiersza jednocześnie wstawionych wierszy. Mam już liczbę wstawionych wierszy, więc po prostu tworzę nową tablicę i zapełniam ją identyfikatorami zaczynającymi się od last_insert_id () i kończącymi się na last_insert_id () + n-1 (gdzie n jest liczbą wstawionych wierszy).

Uważam, że to zadziała z następujących powodów:

1.) Dokumentacja MYSQL stwierdza, że ​​last_insert_id () jest zależne od połączenia i jeśli inny klient / połączenie wstawi nowe rekordy, to nie wpłynie to na last_insert_id () innego klienta.

2.) Uważam, że ponieważ wstawianie odbywa się za pomocą pojedynczej instrukcji SQL, całe wstawienie powinno być traktowane jako pojedyncza transakcja. Jeśli to prawda, powinny obowiązywać reguły ACID, a wartości auto_incremented powinny być sekwencyjne. Nie jestem tego pewien.

To są moje powody, dla których uważam, że logika powinna działać. Moje pytanie brzmi: czy powyższa logika będzie działać dla WSZYSTKICH warunków? Czy mogę polegać na tym, że działa poprawnie we wszystkich sytuacjach? Wiem, że obecnie działa dla mnie.

questionAnswers(7)

yourAnswerToTheQuestion