ultimo registro obtener last inserted insertado after mysql insert key auto-increment

registro - select last id mysql



Obtenga la nueva identificación de clave primaria de registro desde la consulta de inserción de mysql? (6)

¡Aquí lo que estás buscando!

select LAST_INSERT_ID()

Esta es la mejor alternativa de la función SCOPE_IDENTITY() que se utiliza en SQL Server .

También debe tener en cuenta que esto solo funcionará si Last_INSERT_ID() se Last_INSERT_ID() después de su consulta Insert . Esa es la consulta que devuelve el ID insertado en el esquema. No puede obtener la última identificación insertada de la tabla específica.

Para obtener más detalles, vaya a través del enlace El equivalente de la función SQLServer SCOPE_IDENTITY () en mySQL?

Ok, entonces digamos que estoy haciendo un INSERT mysql en una de mis tablas y la tabla tiene la columna item_id que está configurada en autoincrement y primary key .

¿Cómo obtengo la consulta para generar el valor de la nueva clave primaria item_id en la misma consulta?

Actualmente estoy ejecutando una segunda consulta para recuperar el ID, pero esto no parece ser una buena práctica ya que esto podría producir un resultado incorrecto ...

Si esto no es posible, ¿cuál es la mejor práctica para garantizar que recupero la identificación correcta?


De la documentación LAST_INSERT_ID() :

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

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


Si LAST_INSERT_ID() está actuando un poco extraño o no funciona como lo es para mí, utiliza esta declaración simple ...

--- INSERT STATEMENT GOES HERE --- SELECT id FROM table ORDER BY id DESC LIMIT 1;

Esto debería devolver la ID más grande en la tabla, por lo tanto, la última identificación insertada


Si necesita el valor antes de insertar una fila:

CREATE FUNCTION `getAutoincrementalNextVal`(`TableName` VARCHAR(50)) RETURNS BIGINT LANGUAGE SQL NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT '''' BEGIN DECLARE Value BIGINT; SELECT AUTO_INCREMENT INTO Value FROM information_schema.tables WHERE table_name = TableName AND table_schema = DATABASE(); RETURN Value; END

Puedes usar esto en una inserción:

INSERT INTO document (Code, Title, Body) VALUES ( sha1( concat (convert ( now() , char), '' '', getAutoincrementalNextval (''document'') ) ), ''Title'', ''Body'' );


LAST_INSERT_ID() utilizar la función LAST_INSERT_ID() : 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 valor de PRIMARY KEY 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 dado es el primer valor de AUTO_INCREMENT generado para la declaración más reciente que afecta a una columna AUTO_INCREMENT por ese cliente .

Por lo tanto, esto no se ve afectado por otras consultas que puedan estar ejecutándose en el servidor desde otros usuarios.


¡CUIDADO! de "LAST_INSERT_ID ()" si intenta devolver este valor de clave primaria dentro de PHP.

Sé que este hilo no está etiquetado php, pero para cualquiera que haya encontrado esta respuesta que busca devolver un id de inserción de MySQL desde una inserción PHP con scripts utilizando llamadas estándar mysql_query, no funcionará y no es obvio sin capturar errores de SQL.

El último mysqli admite múltiples consultas, que LAST_INSERT_ID () en realidad es una segunda consulta del original.

IMO un SELECCIONAR por separado para identificar la última clave primaria es más seguro que la función opcional mysql_insert_id () que devuelve la identificación AUTO_INCREMENT generada a partir de la operación INSERT previa.