2013-01-09 6 views
5

Ho una tabella che ha una colonna con AUTO INCREMENT. Devo recuperare il valore di questa colonna quando si inserisce una nuova riga (ho bisogno del valore della nuova riga). Ho letto molto su di esso e ho trovato diverse soluzioni, una è l'uso di SELECT LAST_INSERT_ID(). Ho sentito molte cose diverse su questo. Posso o non posso usare questo? Sono preoccupato che un'altra connessione possa inserire una nuova riga prima che sia in grado di chiamare SELECT LAST_INSERT_ID() e quindi ottenere l'ID errato.Utilizzo di MYSQL LAST_INSERT_ID() per recuperare l'ID della riga inserita?

Per riassumere, è sicuro utilizzare SELECT LAST_INSERT_ID()? In caso contrario, come posso recuperare l'ultimo ID inserito in modo sicuro?

+0

Ultima inserto id dovrebbe restituire l'ultimo ID generato per la connessione corrente. Non c'è bisogno di preoccuparsi di altre connessioni. –

+0

Fare riferimento a questo: http: //dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id –

+2

Se si dispone di un pool di connessioni automatiche, è possibile eseguire un'altra chiamata in un altro connessione. Se non lo hai, sei al sicuro. –

risposta

12

Non penso che tu debba preoccuparti del caso che stai citando qui.

Da documentazione di MySQL:
L'ID che è stato generato viene mantenuta nel server su una base per-collegamento. Ciò significa che il valore restituito dalla funzione a un determinato client è il primo valore AUTO_INCREMENT generato per la dichiarazione più recente che interessa una colonna AUTO_INCREMENT da quel client. Questo valore non può essere influenzato da altri client, anche se generano valori AUTO_INCREMENT. Questo comportamento garantisce che ciascun client possa recuperare il proprio ID senza preoccuparsi dell'attività di altri client e senza necessità di blocchi o transazioni.

Per informazioni dettagliate, fare riferimento this

Anche se, mi piacerebbe leggere da altri, se hanno un'opinione diversa.

0

Se è fondamentale disporre dell'ultimo ID della tabella, è possibile bloccare la tabella per le scritture, quindi creare SELECT MAX(id) FROM table_name e quindi sbloccare la tabella.

0

L'ID generato è su una base per connessione quindi non dovresti avere problemi! This post va in maggiore dettaglio.

0

Sì, secondo la documentazione ufficiale, è sicuro:

L'ID che è stato generato viene mantenuto nel server su una base per-collegamento. Ciò significa che il valore restituito dalla funzione a un determinato client è il primo valore AUTO_INCREMENT generato per la più recente istruzione che influisce su una colonna AUTO_INCREMENT da quel client. Questo valore non può essere influenzato da altri client, anche se generano valori AUTO_INCREMENT propri. Questo comportamento garantisce che ciascun client possa recuperare il proprio ID senza preoccuparsi dell'attività di altri client e senza necessità di blocchi o transazioni.

Tratto da: MYSQL Documentation 12.13. Information Functions

0

Se stai usando DOP, utilizzare PDO::lastInsertId.

e se si utilizza MySQL, utilizzare mysqli::$insert_id.

e sì, è sicuro da usare AI Questo è il post che dice questo: http://dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html

e invece di utilizzare selec t dichiarazione direttamente, tenta di utilizzare preparedStatement.

Inoltre è possibile utilizzare la Lock