Obtener el valor actual de INCREMENTO automático para cualquier tabla


¿Cómo obtengo el valor actual AUTO_INCREMENT para una tabla en MySQL?

Author: Andrew Medico, 2013-04-05

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';
 452
Author: methai,
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();
 19
Author: jvdub,
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

 12
Author: johnnyjohnny,
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!

 4
Author: Davidea,
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;
    ?>  
 3
Author: Murat Başar,
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")
 1
Author: Mukul,
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