¿Obtener el ID de clave principal del nuevo registro de la consulta de inserción de MySQL?
Digamos que estoy haciendo MySQL INSERT
en una de mis tablas y la tabla tiene la columna item_id
configurada en autoincrement
y primary key
.
¿Cómo consigo que la consulta genere el valor de la clave principal recién generada item_id
en 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?
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 KEY
valor 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 .
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_query
llamadas estándar, no funcionará y no es obvio sin capturar errores de SQL.
El más nuevo mysqli
admite múltiples consultas, que LAST_INSERT_ID()
en realidad es una segunda consulta del original.
En mi opinión, una función separada SELECT
para identificar la última clave principal es más segura que la mysql_insert_id()
función opcional que devuelve lo AUTO_INCREMENT ID
generado de la operación anterior INSERT
.
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).