Twój komentarz wyjaśniający mówi, że jesteś zainteresowany upewnieniem się, że LAST_INSERT_ID() nie da błędnego wyniku, jeśli nastąpi kolejne jednoczesne INSERT. Zapewniamy, że użycie LAST_INSERT_ID() jest bezpieczne niezależnie od innych współbieżnych działań. LAST_INSERT_ID() zwraca tylko najnowszy identyfikator wygenerowany podczas bieżącej sesji.
Możesz spróbować sam:
- Otwórz dwa okna powłoki, uruchom mysqlclient w każdym i połącz się z bazą danych.
- Powłoka 1:WSTAW do tabeli z kluczem AUTO_INCREMENT.
- Powłoka 1:SELECT LAST_INSERT_ID(), zobacz wynik.
- Powłoka 2:WSTAWIĆ do tej samej tabeli.
- Powłoka 2:SELECT LAST_INSERT_ID(), zobacz wynik inny niż w powłoce 1.
- Powłoka 1:SELECT LAST_INSERT_ID() ponownie, zobacz powtórzenie wcześniejszego wyniku.
Jeśli się nad tym zastanowisz, to jedyny sposób, który ma sens. Wszystkie bazy danych obsługujące mechanizmy autoinkrementacji klucza muszą działać w ten sposób. Jeśli wynik zależy od sytuacji wyścigu, w której inni klienci mogą WSTAWIĆ jednocześnie, nie będzie niezawodnego sposobu na uzyskanie ostatniego wprowadzonego identyfikatora w bieżącej sesji.