Twój komentarz wyjaśnienie mówi, że jesteś zainteresowany upewniając się, że LAST_INSERT_ID() nie daje zły wynik, jeśli inny współbieżne INSERT dzieje. Zapewniamy, że można bezpiecznie używać LAST_INSERT_ID() niezależnie od innych współbieżnych działań. LAST_INSERT_ID() zwraca tylko najnowszy identyfikator wygenerowany podczas bieżącej sesji.
Można spróbować samemu:
- otworzyć dwa okna powłoki, uruchom mysql klienta w każdym i połączyć bazie.
- Powłoka 1: WSTAW do tabeli przy użyciu klucza AUTO_INCREMENT .
- Powłoka 1: SELECT LAST_INSERT_ID(), zobacz wynik.
- Powłoka 2: WSTAW do tej samej tabeli.
- Powłoka 2: Wybór LAST_INSERT_ID() zobaczyć wynik różni się od osłony 1.
- Shell 1: Wybór LAST_INSERT_ID() znów zobaczyć powtórzeniu poprzedniej wynik.
Jeśli myślisz o tym, jest to jedyny sposób, który ma sens. Wszystkie bazy danych, które obsługują mechanizmy klucza automatycznego inkrementacji, muszą działać w ten sposób. Jeśli wynik zależy od warunków wyścigu, w którym inni klienci mogą jednocześnie WSTAWIĆ, wówczas nie będzie niezawodnego sposobu uzyskania ostatniej wstawionej wartości identyfikacyjnej w bieżącej sesji.
Wyjaśnienie: Kod ma wstawić następnie last_insert_id. Dwa z tych stwierdzeń wykonać niemal w tym samym czasie i exec order zamienia wkładka nr 1 wkładka # 2 LAST_INSERT_ID # 1 uzupełnia i zwraca identyfikator z wkładką nr 2 LAST_INSERT_ID nr 2 wypełnia i zwraca identyfikator z wkładką # 2 Czy to możliwe? – MPX