Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como ler e redefinir AUTO_INCREMENT no MySQL


Este tutorial fornece a consulta para redefinir AUTO_INCREMENT no MySQL usando a tabela InnoDB. Ele mostra como atualizar o atributo AUTO_INCREMENT de uma tabela InnoDB.


Precauções




Não use o comando ALTER em tabelas com dados grandes. O MySQL leva muito tempo para atualizar a tabela caso o tamanho da tabela seja grande.

O comando ALTER deve ser usado somente quando for realmente necessário.

O AUTO_INCREMENT não pode ser atribuído com um valor inferior ao máximo de valores existentes.


Criar um banco de dados e uma tabela




Nesta seção, criaremos o banco de dados e a tabela a ser usada para atualizar o 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 demonstrar as operações AUTO_INCREMENT, vamos inserir algumas linhas como mostrado abaixo.


# 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 Leia exemplos

 


Podemos obter o valor AUTO_INCREMENT atual para qualquer tabela usando a consulta conforme mostrado abaixo. Pode não refletir o valor corretamente, pois o INFORMATION_SCHEMA mostra o valor aproximado que pode não ser o 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



Agora espere um minuto e execute as consultas abaixo mencionadas.


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



Ele ainda mostra o valor AUTO_INCREMENT como 5, mas o valor esperado é 6. Isso é o que eu quis dizer com um valor aproximado.



Também podemos chamar a função LAST_INSERT_ID para obter o AUTO_INCREMENT valor menos um imediatamente após executar a consulta INSERT. Pode não ser o melhor obter o valor AUTO_INCREMENT usando LAST_INSERT_ID na maioria dos cenários, especialmente na produção.


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

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



Após executar as consultas acima, o valor AUTO_INCREMENT esperado é 7, e chamar LAST_INSERT_ID() mostra 6 que está correto, mas pode não ser ideal usar LAST_INSERT_ID() para obter o valor AUTO_INCREMENT.



Outra maneira de obter o valor AUTO_INCREMENT é usando o comando SHOW conforme mostrado abaixo. Também mostra o valor aproximado que pode não ser o 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



O valor de Rows é 4 e Auto_Increment é 5, que não é o valor real. Esses são valores aproximados.



Para obter o valor exato, podemos usar o comando SHOW CREATE como mostrado abaixo.


# 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



Isso mostra o valor exato do atributo AUTO_INCREMENT.


Exemplos de atualização de AUTO_INCREMENT




Para atualizar o valor de AUTO_INCREMENT, podemos usar a consulta ALTER conforme mostrado abaixo. É fácil definir o valor AUTO_INCREMENT de uma tabela vazia, pois o MySQL não precisa fazer uma cópia das linhas existentes para executar o comando ALTER. Além disso, podemos redefinir AUTO_INCREMENT para 1 ou configurá-lo para qualquer valor preferido para iniciar a sequência.


# 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;


Resumo




Este tutorial forneceu as consultas com exemplos para obter o valor do atributo AUTO_INCREMENT de uma tabela InnoDB. Ele também forneceu exemplos para atualizar o atributo AUTO_INCREMENT.