Kiedy robię pojedynczy wiersz INSERTdo tabeli, która ma AUTO_INCREMENTkolumnę, chciałbym użyć LAST_INSERT_ID()funkcji, aby zwrócić nową AUTO_INCREMENTwartość 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_IDENTITYi @@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_INCREMENTwartością wygenerowaną dla najnowszej instrukcji wpływającej naAUTO_INCREMENTkolumnę przez tego klienta . Na tę wartość nie mogą wpływać inni klienci, nawet jeśli generująAUTO_INCREMENTwł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_INCREMENTkolumn 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.