2011-01-09 19 views
32

Si inserto varios registros con un bucle que ejecuta una sola inserción de registro, la última identificación de inserción devuelta es, como era de esperar, la última. Pero si hago una declaración múltiples registros de inserción:MySQL LAST_INSERT_ID() se utiliza con varios registros instrucción INSERT

INSERT INTO people (name,age) 
VALUES ('William',25), ('Bart',15), ('Mary',12); 

Digamos que los tres anteriores son los primeros registros insertados en la tabla. Después de la instrucción de inserción, esperaba que la última identificación de inserción devolviera 3, pero devolvió 1. La primera identificación de inserción para la declaración en cuestión.

Así que alguien puede confirmar si este es el comportamiento normal de LAST_INSERT_ID() en el contexto de múltiples registros INSERT declaraciones. Entonces puedo basar mi código en eso.

+0

¿Su tabla tiene un auto-incrementID? –

+4

los dos segundos identificadores de inserción son fácilmente computables. solo agregue uno para cada registro después del primero. – dqhendricks

+2

@dqhendricks ¿está seguro de que los identificadores estarán correctos? por lo que yo sé, las inserciones con innodb no bloquean un cierto conjunto de identificadores y otro proceso puede insertar una entrada intermedia, aunque no estoy seguro de esto para valores múltiples en 'INSERTAR ... VALORES ...' –

Respuesta

37

Sí. Este comportamiento de last_insert_id() es documented in the MySQL docs:

Importante
Si inserta varias filas utilizando un único INSERT declaración, LAST_INSERT_ID() devuelve el valor generado por sólo la primera fila insertada. La razón para esto es hacer posible reproducir fácilmente la misma declaración INSERT en algún otro servidor.

2

Este comportamiento se menciona en el man page para MySQL. Está en los comentarios, pero no se cuestiona, así que supongo que es el comportamiento esperado.

+0

FYI: Este comportamiento está documentado en el manual de MySQL real, no solo en los comentarios de los usuarios. Ver [mi respuesta] (http://stackoverflow.com/questions/4637367/mysql-last-insert-id-used-with-multiple-records-insert-statement/7959695#7959695) para más detalles. – Asaph

Cuestiones relacionadas