Kiedy robię pojedynczy wiersz INSERT
do tabeli, która ma AUTO_INCREMENT
kolumnę, chciałbym użyć LAST_INSERT_ID()
funkcji, aby zwrócić nową AUTO_INCREMENT
wartość ed zapisaną dla tego wiersza.
Ponieważ wielu programistów i administratorów Microsoft SQL Server jest bez wątpienia świadomych równoważnej funkcjonalności SQL Server ( SCOPE_IDENTITY
i @@IDENTITY
) nie obyło się bez problemów .
Wiem, że dokumentacja MySQL:
Wygenerowany identyfikator jest przechowywany na serwerze na podstawie połączenia . Oznacza to, że wartość zwrócona przez funkcję do danego klienta jest pierwszą
AUTO_INCREMENT
wartością wygenerowaną dla najnowszej instrukcji wpływającej naAUTO_INCREMENT
kolumnę przez tego klienta . Na tę wartość nie mogą wpływać inni klienci, nawet jeśli generująAUTO_INCREMENT
własne wartości. Takie zachowanie zapewnia, że każdy klient może odzyskać swój własny identyfikator bez obawy o aktywność innych klientów i bez potrzeby blokowania lub transakcji.
a nawet posunąć się do stwierdzenia:
Jednoczesne używanie
LAST_INSERT_ID()
iAUTO_INCREMENT
kolumn wielu klientów jest całkowicie poprawne.
Czy są znane zagrożenia lub scenariusze, które mogą spowodować, że LAST_INSERT_ID()
nie zwrócą prawidłowej wartości?
Używam MySQL 5.5 na CentOS 5.5 x64 i Fedora 16 x64 oraz silnik InnoDB.
last_insert_id()
aby ocenić, czy zapytanie zakończyło się powodzeniem. W końcu jest to ostatni wstawiony identyfikator, zawierający wartości, których potrzebujesz, gdy już wiesz, że ci się udało.