¿Obtener el ID de clave principal del nuevo registro de la consulta de inserción de MySQL?

Resuelto Amy Neville asked hace 11 años • 14 respuestas

Digamos que estoy haciendo MySQL INSERTen una de mis tablas y la tabla tiene la columna item_idconfigurada en autoincrementy primary key.

¿Cómo consigo que la consulta genere el valor de la clave principal recién generada item_iden la misma consulta?

Actualmente estoy ejecutando una segunda consulta para recuperar la identificación, pero esto no parece una buena práctica considerando que podría producir un resultado incorrecto...

Si esto no es posible, ¿cuál es la mejor práctica para asegurarme de recuperar la identificación correcta?

Amy Neville avatar Jun 14 '13 23:06 Amy Neville
Aceptado

Debe utilizar la LAST_INSERT_ID()función: http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id

P.ej:

INSERT INTO table_name (col1, col2,...) VALUES ('val1', 'val2'...);
SELECT LAST_INSERT_ID();

Esto le devolverá el PRIMARY KEYvalor de la última fila que insertó :

La ID que se generó se mantiene en el servidor por conexión . Esto significa que el valor devuelto por la función a un cliente determinado es el primer valor AUTO_INCREMENT generado para la declaración más reciente que afecta una columna AUTO_INCREMENT por ese cliente .

Por lo tanto, el valor devuelto por LAST_INSERT_ID()es por usuario y no se ve afectado por otras consultas que otros usuarios puedan estar ejecutándose en el servidor .

Duncan Lock avatar Jun 14 '2013 16:06 Duncan Lock

TENER CUIDADO !! deLAST_INSERT_ID() si intenta devolver este valor de clave principal dentro de PHP.

Sé que este hilo no está etiquetado como PHP, pero para cualquiera que haya encontrado esta respuesta y busque devolver una identificación de inserción de MySQL desde una inserción con script PHP usando mysql_queryllamadas estándar, no funcionará y no es obvio sin capturar errores de SQL.

El más nuevo mysqliadmite múltiples consultas, que LAST_INSERT_ID()en realidad es una segunda consulta del original.

En mi opinión, una función separada SELECTpara identificar la última clave principal es más segura que la mysql_insert_id()función opcional que devuelve lo AUTO_INCREMENT IDgenerado de la operación anterior INSERT.

Martin Sansone - MiOEE avatar Aug 06 '2014 21:08 Martin Sansone - MiOEE

De la LAST_INSERT_ID()documentación:

La ID que se generó se mantiene en el servidor por conexión.

Es decir, si tiene dos solicitudes separadas al script simultáneamente, no se afectarán entre sí LAST_INSERT_ID()(a menos que esté utilizando una conexión persistente).

Explosion Pills avatar Jun 14 '2013 16:06 Explosion Pills