Obtener el valor actual de AUTO_INCREMENT para cualquier tabla

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

Puede obtener todos los datos de la tabla usando esta consulta:

SHOW TABLE STATUS FROM `DatabaseName` WHERE `name` LIKE 'TableName' ; 

Puede obtener exactamente esta información usando esta consulta:

 SELECT `AUTO_INCREMENT` FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'DatabaseName' AND TABLE_NAME = 'TableName'; 

Creo que estás buscando la función LAST_INSERT_ID () de MySQL. Si está en la línea de comando, simplemente ejecute lo siguiente:

 LAST_INSERT_ID(); 

También puede obtener este valor a través de una consulta SELECT:

 SELECT LAST_INSERT_ID(); 

Si solo quiere saber 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

A pesar de que la respuesta de methai es correcta si se ejecuta manualmente la consulta, el problema ocurre cuando 2 conexiones / transacciones concurrentes realmente ejecutan esta consulta en tiempo de ejecución en producción (por ejemplo).

Solo intenté 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; 

El inserto de la transacción 1 está bien: El inserto de la transacción 2 entra por error: Código de error: 1062. Entrada duplicada ’21’ para la clave ‘PRIMARIO’.

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 last_insert_id () justo después del inserto! ¡Y podemos reutilizar esa identificación para insertarla en otras tablas donde se espera una clave externa!

Además, no podemos ejecutar las 2 consultas de la siguiente manera:

 insert into translation (id) values ((SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='translation')); 

porque en realidad estamos interesados ​​en agarrar / reutilizar esa ID en otra tabla o ¡para regresar!

código de muestra 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; ?> 

Si la columna está autoincrementada en el servidor sql, entonces para ver el valor actual autoincrementado, 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")