2009-11-05 12 views
7

È possibile ottenere gli ID auto incrementati da una query che inserisce più righe? es .:php mysql_insert_id su più righe?

INSERIRE nella tabella (col1, col2) VALORI (1, 2), (3, 4), (5, 6);

In alternativa, c'è un modo per trovare il valore di incremento automatico SUCCESSIVO SENZA inserire nulla nella tabella?

Grazie

risposta

4

Per quanto ne so auto_increment non colmare le lacune tra i ids e l'operazione è atomica. Quindi puoi presumere che saranno in fila.

+1

MySql supporta gli offset di incremento automatico (questo è più comune nella replica), quindi ID consecutivi non sono una garanzia in tutti gli ambienti. – webbiedave

+0

Si può tranquillamente assumere ID consecutivi in ​​[circostanze seguenti] (http://dev.mysql.com/doc/refman/5.1/en/innodb-auto-increment-handling.html) in MySql: si sta utilizzando InnoDB, innodb_autoinc_lock_mode è impostato su 0 o 1 (predefinito). –

4

http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id

Se si inserisce più righe utilizzando una singola INSERT dichiarazione, LAST_INSERT_ID() restituisce il valore generato per la prima unica riga inserita.

Quindi no, non è possibile ottenere tutti i ids facilmente, ma si può supporre che sono continue. Si dovrebbe mai fare affidamento su ipotesi però. Sembra che tu voglia indovinare il prossimo id che verrebbe dopo il tuo inserimento di massa? Se è così, non provarci nemmeno e pensa a un altro modo per fare qualunque cosa tu voglia fare. :)

0

per ottenere il prossimo id auto_increment è possibile utilizzare:

SELECT auto_increment FROM information_schema.tables WHERE table_name = 'table-you-want-to-check'; 

Tuttavia, non si può decidere di fare affidamento sulla auto_increment id o last_insert_id() nella logica del codice. Ad esempio, supponiamo che due persone, A & B, aggiungano domande al tuo db quasi allo stesso momento e tu stia utilizzando lo last_insert_id() per determinare l'ID della domanda della persona. Cosa succede quando entrambi presentano la loro domanda allo stesso tempo? È il last_insert_id() dalla persona A o B?

Un metodo per risolvere questo problema consiste nell'utilizzare un ID "predefinito" o guid in aggiunta o in sostituzione dell'id auto incrementato.

Problemi correlati