2009-11-05 49 views
7

¿Es posible conseguir el auto incrementa los identificadores de una consulta que inserta varias filas? por ejemplo:php mysql_insert_id en varias filas?

INSERT INTO table (col1, col2) VALUES (1, 2), (3, 4), (5, 6);

Alteratively, ¿hay una manera de encontrar el valor de incremento automático siguiente sin insertar cualquier cosa en la mesa?

Gracias

Respuesta

4

Por lo que yo sé AUTO_INCREMENT no llenar los vacíos entre las identificaciones y la operación es atómica. Entonces puedes asumir que estarán en una fila.

+1

MySQL soporta las compensaciones de incremento automático (esto es más común en la replicación) de manera consecutiva id no es una garantía en todos los ambientes. – webbiedave

+0

Usted puede asumir con seguridad las identificaciones consecutivas bajo las siguientes circunstancias [] (http://dev.mysql.com/doc/refman/5.1/en/innodb-auto-increment-handling.html) en MySQL: está utilizando InnoDB, innodb_autoinc_lock_mode está configurado a 0 o 1 (predeterminado). –

4

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

Si inserta varias filas utilizando un único INSERT declaración, LAST_INSERT_ID() devuelve el valor generado por la primera fila insertada solamente.

Así que no, no se puede obtener todos los identificadores de fácil, pero se puede suponer que son continuas. Usted debe Nunca basarse en suposiciones sin embargo. Parece que quieres adivinar el próximo id que vendría después de tu inserción masiva? Si es así, ni siquiera intentes esto y pienses en otra forma de hacer lo que sea que quieras hacer. :)

0

para obtener el siguiente ID AUTO_INCREMENT puede utilizar:

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

Sin embargo, es posible que no quiere depender de la auto_increment Identificación last_insert_id() o en la lógica de su código. Por ejemplo, digamos que dos personas, una & B, están añadiendo preguntas a su base de datos a cerca del mismo momento y se está utilizando el last_insert_id() para determinar el identificador de la pregunta de la persona. ¿Qué sucede cuando ambos presentan su pregunta al mismo tiempo? ¿Es el last_insert_id() de la persona A o B?

Un método para solucionar este problema es utilizar una identificación "predefinida" o guid además o en lugar de la identificación con incremento automático.