with traves query partir mediante into insertar how from data mysql insert lastinsertid

traves - MySQL LAST_INSERT_ID() utilizado con múltiples registros instrucción INSERT



insertar a partir de un select mysql (3)

Creo que es posible si su tabla tiene una columna autoincrement (ID) activada y no necesita que sea devuelta por mysql. Lo represento solo de una forma de experimento mental sin un código válido por el momento. Creo que requeriría estos pasos:

  1. Obtenga MAX (ID) justo antes de su inserción;
  2. Realice múltiples consultas INSERTAR ... VALORES () con sus datos y guárdelos;
  3. Obtener lastInsertId ();
  4. Obtenga registros con ID entre la primera y la última ID que obtuvo: MAX (ID) y lastInsertId ();
  5. Haga una verificación de los datos recuperados con los datos que ha insertado para que coincidan con ellos y elimine los registros que no haya insertado. Los registros restantes tienen sus ID;

Así es como una persona común lo resolvería en un mundo real. Gracias a la autoincrementación, debe obtener la menor cantidad posible de registros para comprobar, por lo que no requerirá mucho procesamiento.

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 se esperaba, la última. Pero si hago una declaración de inserción de múltiples registros:

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.

Entonces, ¿alguien puede confirmar si este es el comportamiento normal de LAST_INSERT_ID() en el contexto de múltiples registros de instrucciones INSERT? Entonces puedo basar mi código en eso.


Este comportamiento se menciona en la página del manual para MySQL. Está en los comentarios, pero no se cuestiona, así que supongo que es el comportamiento esperado.