Quando eseguo una singola riga INSERTsu una tabella con una AUTO_INCREMENTcolonna, vorrei utilizzare la LAST_INSERT_ID()funzione per restituire il nuovo AUTO_INCREMENTvalore "ed" memorizzato per quella riga.
Poiché molti sviluppatori e amministratori di Microsoft SQL Server sono senza dubbio consapevoli che le funzionalità equivalenti in SQL Server ( SCOPE_IDENTITYe @@IDENTITY) non sono state prive di problemi .
Conosco lo stato dei documenti MySQL:
L'ID che è stato generato viene gestito nel server in base alla connessione . Ciò significa che il valore restituito dalla funzione a un determinato client è il primo
AUTO_INCREMENTvalore generato per l'ultima istruzione che interessa unaAUTO_INCREMENTcolonna da quel client . Questo valore non può essere influenzato da altri client, anche se generanoAUTO_INCREMENTvalori propri. Questo comportamento garantisce che ogni client possa recuperare il proprio ID senza preoccuparsi dell'attività di altri client e senza la necessità di blocchi o transazioni.
e arriva persino a dire:
L'uso
LAST_INSERT_ID()e leAUTO_INCREMENTcolonne contemporaneamente da più client è perfettamente valido.
Esistono rischi o scenari noti che potrebbero causare la LAST_INSERT_ID()mancata restituzione del valore corretto?
Sto usando MySQL 5.5 su CentOS 5.5 x64 e Fedora 16 x64 e il motore InnoDB.