Obtener el valor actual de INCREMENTO automático para cualquier tabla
¿Cómo obtengo el valor actual AUTO_INCREMENT para una tabla en MySQL?
6 answers
Puede obtener todos los datos de la tabla utilizando esta consulta:
SHOW TABLE STATUS FROM `DatabaseName` WHERE `name` LIKE 'TableName' ;
Puede obtener exactamente esta información utilizando esta consulta:
SELECT `AUTO_INCREMENT`
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'DatabaseName'
AND TABLE_NAME = 'TableName';
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-01 05:46:41
Creo que estás buscando la función LAST_INSERT_ID() de MySQL. Si está en la línea de comandos, simplemente ejecute lo siguiente:
LAST_INSERT_ID();
También puede obtener este valor a través de una consulta SELECT:
SELECT LAST_INSERT_ID();
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-04 22:50:48
Si solo desea conocer el número, en lugar de obtenerlo en una consulta, puede usar:
SHOW CREATE TABLE tablename;
Deberías ver el auto_increment en la parte inferior
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-16 09:33:20
A pesar de que la respuesta de methai es correcta si ejecuta manualmente la consulta, el problema ocurre cuando 2 transacciones/conexiones simultáneas realmente ejecutan esta consulta en tiempo de ejecución en producción (por ejemplo).
Acabo de probar manualmente en MySQL workbench con 2 conexiones abiertas simultáneamente:
CREATE TABLE translation (
id BIGINT PRIMARY KEY AUTO_INCREMENT
);
# Suppose we have already 20 entries, we execute 2 new inserts:
Transacción 1:
21 = SELECT `AUTO_INCREMENT` FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'DatabaseName' AND TABLE_NAME = 'translation';
insert into translation (id) values (21);
Transacción 2:
21 = SELECT `AUTO_INCREMENT` FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'DatabaseName' AND TABLE_NAME = 'translation';
insert into translation (id) values (21);
# commit transaction 1;
# commit transaction 2;
Insertar la transacción 1 está bien: Inserción de la transacción 2 va en error: Código de error: 1062. Duplicar la entrada " 21 "para la clave "PRIMARIA".
Una buena solución sería la respuesta de jvdub porque por transacción / conexión los 2 insertos serán:
Transacción 1:
insert into translation (id) values (null);
21 = SELECT LAST_INSERT_ID();
Transacción 2:
insert into translation (id) values (null);
22 = SELECT LAST_INSERT_ID();
# commit transaction 1;
# commit transaction 2;
Pero tenemos que ejecutar el last_insert_id() justo después de la inserción! ¡Y podemos reutilizar ese id para insertarlo en otras tablas donde se espera una clave foránea!
Además, no podemos ejecutar las 2 consultas como siguiente:
insert into translation (id) values ((SELECT AUTO_INCREMENT FROM
information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE()
AND TABLE_NAME='translation'));
Porque realmente estamos interesados en agarrar / reutilizar ese ID en otra tabla o volver!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-20 21:31:03
Código de ejemplo ejecutable Mysqli:
<?php
$db = new mysqli("localhost", "user", "password", "YourDatabaseName");
if ($db->connect_errno) die ($db->connect_error);
$table=$db->prepare("SHOW TABLE STATUS FROM YourDatabaseName");
$table->execute();
$sonuc = $table->get_result();
while ($satir=$sonuc->fetch_assoc()){
if ($satir["Name"]== "YourTableName"){
$ai[$satir["Name"]]=$satir["Auto_increment"];
}
}
$LastAutoIncrement=$ai["YourTableName"];
echo $LastAutoIncrement;
?>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-05 17:02:08
Si la columna está autoincrementada en sql server, entonces para ver el valor autoincrementado actual, y si desea editar ese valor para esa columna, use la siguiente consulta.
-- to get current value
select ident_current('Table_Name')
-- to update current value
dbcc checkident ('[Table_Name]',reseed,"Your Value")
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-04 14:27:34