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.