Ok, digamos que estoy haciendo un mysql INSERT
en una de mis tablas y la tabla tiene la columna item_id
que está configurada en autoincrement
y primary key
.
¿Cómo consigo que la consulta muestre el valor de la clave primaria 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 teniendo en cuenta que esto podría producir un resultado incorrecto ...
Si esto no es posible, ¿cuál es la mejor práctica para garantizar que recupere la identificación correcta?
mysql
insert
key
auto-increment
Amy Neville
fuente
fuente
INSERT
consulta como esa; ¿Por qué crees que podría producir un resultado incorrecto?Respuestas:
Debe usar la
LAST_INSERT_ID()
función: http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-idP.ej:
Esto le devolverá el
PRIMARY KEY
valor de la última fila que se insertó: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 ejecutando en el servidor .fuente
PRIMARY KEY
valor de la última fila que se ha insertado, porque es por conexión - cada conexión al servidor mantendrá su propio valor de esta. He actualizado la respuesta para aclarar esto.CUIDADO !! de "LAST_INSERT_ID ()" si intenta devolver este valor de clave primaria dentro de PHP.
Sé que este hilo no está etiquetado como php, pero para cualquiera que haya encontrado esta respuesta que busca devolver una identificación de inserción de MySQL desde una inserción con script PHP usando llamadas estándar mysql_query, no funcionará y no es obvio sin capturar errores de SQL.
El mysqli más nuevo admite múltiples consultas, que LAST_INSERT_ID () en realidad es una segunda consulta del original.
IMO un SELECT separado para identificar la última clave primaria es más seguro que la función opcional mysql_insert_id () que devuelve el ID de AUTO_INCREMENT generado a partir de la operación INSERT previa.
fuente
LAST_INSERT_ID
es una función MySQL por conexión. Si consulta la última ID de inserción, es posible que una conexión separada haya realizado una escritura y tenga la ID incorrecta.mysql_insert_id()
también funciona por conexión, pero también sufre un comportamiento extraño como se ve aquí stackoverflow.com/a/897374/1305910 en el comentario de Cliffordlife - no importa que todos deberíamos haber estado usandomysqli
De la
LAST_INSERT_ID()
documentación:Es decir, si tiene dos solicitudes separadas para el script simultáneamente, no se afectarán entre sí
LAST_INSERT_ID()
(a menos que esté usando una conexión persistente, tal vez).fuente
Aquí lo que buscas !!!
Esta es la mejor alternativa de
SCOPE_IDENTITY()
función utilizadaSQL Server
.También debe tener en cuenta que esto solo funcionará si
Last_INSERT_ID()
se activa después de suInsert
consulta. Es decir, la consulta devuelve la identificación insertada en el esquema. No puede obtener la última identificación de tabla específica insertada.Para obtener más detalles, consulte el enlace ¿ El equivalente de la función SQLServer SCOPE_IDENTITY () en mySQL?
fuente
Si necesita el valor antes de insertar una fila:
Puede usar esto en una inserción:
fuente
Recibirá estos parámetros en el resultado de su consulta:
El
insertId
es exactamente lo que necesitas.(NodoJS-mySql)
fuente
Si está en Python usando pymysql, desde el cursor puede usar cursor.lastrowid
fuente
simplemente use "$ last_id = mysqli_insert_id ($ conn);"
fuente
Si está utilizando PHP: en un objeto PDO puede invocar simplemente el método lastInsertId después de su inserción.
De lo contrario, con un LAST_INSERT_ID puede obtener el valor de esta manera:
SELECT LAST_INSERT_ID();
fuente
solía
return $this->db->insert_id();
para Codeigniterfuente
Solo quiero compartir mi enfoque sobre esto en PHP, algunos de ustedes pueden encontrar que no es una forma eficiente, pero esto es 100 mejor que otras opciones disponibles.
generar una clave aleatoria e insertarla en la tabla creando una nueva fila. entonces puede usar esa clave para recuperar la clave primaria. usa la actualización para agregar datos y hacer otras cosas.
hacer esto ayuda a asegurar una fila y a tener la clave primaria correcta.
Realmente no recomiendo esto a menos que no tenga otras opciones.
fuente