sql >> Base de Datos >  >> RDS >> Mysql

Cómo leer y restablecer AUTO_INCREMENT en MySQL

Este tutorial proporciona la consulta para restablecer AUTO_INCREMENT en MySQL usando InnoDB Table. Muestra cómo actualizar el atributo AUTO_INCREMENT de una tabla InnoDB.

Precauciones

No use el comando ALTER en tablas que tengan muchos datos. MySQL tarda mucho en actualizar la tabla en caso de que el tamaño de la tabla sea grande.

El comando ALTER debe usarse solo cuando sea realmente necesario.

El AUTO_INCREMENT no se puede asignar con un valor inferior al máximo de valores existentes.

Crear una base de datos y una tabla

En esta sección, crearemos la base de datos y la tabla que se utilizará para actualizar el atributo AUTO_INCREMENT.

# Create the Database
CREATE SCHEMA `autoinc` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

# Create the Table
CREATE TABLE `autoinc`.`user` (
`id` INT NOT NULL AUTO_INCREMENT,
`firstName` VARCHAR(100) NOT NULL,
`lastName` VARCHAR(100) NULL,
`username` VARCHAR(45) NOT NULL,
PRIMARY KEY (`id`));

Para demostrar las operaciones AUTO_INCREMENT, insertaremos algunas filas como se muestra a continuación.

# Insert Rows
INSERT INTO `autoinc`.`user`(`firstName`,`lastName`,`username`) values('John', 'Dave', 'johndave007');
INSERT INTO `autoinc`.`user`(`firstName`,`lastName`,`username`) values('Vijay', 'Mallik', 'mallikvijay');
INSERT INTO `autoinc`.`user`(`firstName`,`lastName`,`username`) values('Ricky', 'Walker', 'rickyhunt');
INSERT INTO `autoinc`.`user`(`firstName`,`lastName`,`username`) values('Vikas', 'Roy', 'vikasroy');

AUTO_INCREMENT Ejemplos de lectura

 

Podemos obtener el valor AUTO_INCREMENT actual para cualquier tabla usando la consulta como se muestra a continuación. Es posible que no refleje el valor correctamente ya que INFORMATION_SCHEMA muestra el valor aproximado que podría no ser el valor real.

# Syntax
SELECT `AUTO_INCREMENT` FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '<database>' AND TABLE_NAME = '<table>';

# Example
SELECT `AUTO_INCREMENT` FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'autoinc' AND TABLE_NAME = 'user';

# Result
---------------
AUTO_INCREMENT
---------------
5

Ahora espere un minuto y ejecute las consultas mencionadas a continuación.

INSERT INTO `autoinc`.`user`(`firstName`,`lastName`,`username`) values( 'Nick', 'Jones', 'nick' );

SELECT `AUTO_INCREMENT` FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'autoinc' AND TABLE_NAME = 'user';

# Result
---------------
AUTO_INCREMENT
---------------
5

Todavía muestra el valor AUTO_INCREMENT como 5, pero el valor esperado es 6. Esto es lo que quise decir con un valor aproximado.

También podemos llamar a la función LAST_INSERT_ID para obtener el AUTO_INCREMENT valor menos uno inmediatamente después de ejecutar la consulta INSERT. Puede que no sea lo mejor obtener el valor AUTO_INCREMENT usando LAST_INSERT_ID en la mayoría de los escenarios, especialmente en producción.

# Example
INSERT INTO `autoinc`.`user`(`firstName`,`lastName`,`username`) values('Nicolas', 'Dave', 'nicolas' );
SELECT LAST_INSERT_ID() as `id`;

# Result
---------------
id
---------------
6

Después de ejecutar las consultas anteriores, el valor esperado de AUTO_INCREMENT es 7, y llamar a LAST_INSERT_ID() muestra 6, que es correcto, pero podría no ser ideal usar LAST_INSERT_ID() para obtener el valor de AUTO_INCREMENT.

Otra forma de obtener el valor AUTO_INCREMENT es usando el comando SHOW como se muestra a continuación. También muestra el valor aproximado que podría no ser el valor real.

# Syntax
SHOW TABLE STATUS FROM `<database>` WHERE `name` LIKE '<table>';

# Example
SHOW TABLE STATUS FROM `autoinc` WHERE `name` LIKE 'user';

# Result
------------------------------
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
------------------------------
user InnoDB 10 Dynamic 4 4096 16384 0 0 0 5 2020-05-26 20:01:31 2020-05-26 20:04:14 NULL utf8mb4_unicode_ci NULL

El valor de Rows es 4 y Auto_Increment es 5, que no es el valor real. Estos son valores aproximados.

Para obtener el valor exacto, podemos usar el comando MOSTRAR CREAR como se muestra a continuación.

# Example
SHOW CREATE TABLE user;

# Result
Table Create Table
------------------------------
user CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`firstName` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
`lastName` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`username` varchar(45) COLLATE utf8mb4_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

Esto muestra el valor exacto del atributo AUTO_INCREMENT.

Ejemplos de actualización AUTO_INCREMENT

Para actualizar el valor de AUTO_INCREMENT, podemos usar la consulta ALTER como se muestra a continuación. Es fácil establecer el valor AUTO_INCREMENT de una tabla vacía ya que MySQL no necesita hacer una copia de las filas existentes para ejecutar el comando ALTER. Además, podemos restablecer AUTO_INCREMENT a 1 o establecerlo en cualquier valor preferido para iniciar la secuencia.

# Syntax
ALTER TABLE <table> AUTO_INCREMENT = <value>;

# Examples

ALTER TABLE `autoinc`.`user` AUTO_INCREMENT = 1;

ALTER TABLE user AUTO_INCREMENT = 1;

ALTER TABLE `autoinc`.`user` AUTO_INCREMENT = 100000;

Resumen

Este tutorial proporcionó las consultas con ejemplos para obtener el valor del atributo AUTO_INCREMENT de una tabla InnoDB. También proporcionó ejemplos para actualizar el atributo AUTO_INCREMENT.