Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment lire et réinitialiser AUTO_INCREMENT dans MySQL

Ce tutoriel fournit la requête pour réinitialiser AUTO_INCREMENT dans MySQL à l'aide de la table InnoDB. Il montre comment mettre à jour l'attribut AUTO_INCREMENT d'une table InnoDB.

Précautions

N'utilisez pas la commande ALTER sur des tables contenant des données volumineuses. MySQL met beaucoup de temps à mettre à jour la table si la taille de la table est importante.

La commande ALTER ne doit être utilisée que lorsque cela est vraiment nécessaire.

L'AUTO_INCREMENT ne peut pas être affecté avec une valeur inférieure au maximum des valeurs existantes.

Créer une base de données et une table

Dans cette section, nous allons créer la base de données et la table à utiliser pour mettre à jour l'attribut AUTO_INCREMENT.

# Créer la base de données
CREATE SCHEMA `autoinc` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

# Créer la 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,
CLÉ PRIMAIRE (`id`));

Pour illustrer les opérations AUTO_INCREMENT, nous allons insérer quelques lignes comme indiqué ci-dessous.

# 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` ,`nom d'utilisateur`) values('Vikas', 'Roy', 'vikasroy');

AUTO_INCREMENT Lire des exemples

 

Nous pouvons obtenir la valeur AUTO_INCREMENT actuelle pour n'importe quelle table en utilisant la requête comme indiqué ci-dessous. Il se peut qu'il ne reflète pas correctement la valeur car INFORMATION_SCHEMA affiche la valeur approximative qui peut ne pas être la valeur réelle.

# Syntaxe
SELECT `AUTO_INCREMENT` FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA =' ' AND TABLE_NAME =' ';

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

# Résultat
---------------
AUTO_INCREMENT
---------------
5

Attendez maintenant une minute et exécutez les requêtes mentionnées ci-dessous.

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

# Résultat
---------------
AUTO_INCREMENT
---------------
5

Il affiche toujours la valeur AUTO_INCREMENT comme 5, mais la valeur attendue est 6. C'est ce que je voulais dire avec une valeur approximative.

Nous pouvons également appeler la fonction LAST_INSERT_ID pour obtenir le AUTO_INCREMENT valeur moins un immédiatement après l'exécution de la requête INSERT. Il n'est peut-être pas préférable d'obtenir la valeur AUTO_INCREMENT en utilisant LAST_INSERT_ID dans la plupart des scénarios, en particulier en production.

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

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

Après avoir exécuté les requêtes ci-dessus, la valeur AUTO_INCREMENT attendue est 7 et l'appel de LAST_INSERT_ID() affiche 6, ce qui est correct, mais il n'est peut-être pas idéal d'utiliser LAST_INSERT_ID() pour obtenir la valeur AUTO_INCREMENT.

Une autre façon d'obtenir la valeur AUTO_INCREMENT consiste à utiliser la commande SHOW comme indiqué ci-dessous. Il montre également la valeur approximative qui pourrait ne pas être la valeur réelle.

# Syntaxe
AFFICHER L'ÉTAT DE LA TABLE À PARTIR DE ` ` WHERE `nom` LIKE '
';

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

# Résultat
---- --------------------------
Nom Version du moteur 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 Commentaire
------------------------------
utilisateur InnoDB 10 Dynamique 4 4096 16384 0 0 0 5 2020-05 -26 20:01:31 2020-05-26 20:04:14 NULL utf8mb4_unicode_ci NULL

La valeur de Rows est 4 et Auto_Increment est 5, ce qui n'est pas la valeur réelle. Ce sont des valeurs approximatives.

Pour obtenir la valeur exacte, nous pouvons utiliser la commande SHOW CREATE comme indiqué ci-dessous.

# Exemple
SHOW CREATE TABLE utilisateur ;

# Résultat
Table Créer une 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,
CLÉ PRIMAIRE (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 CHARSET PAR DÉFAUT=utf8mb4 COLLATE=utf8mb4_unicode_ci

Cela montre la valeur exacte de l'attribut AUTO_INCREMENT.

AUTO_INCREMENT Exemples de mise à jour

Pour mettre à jour la valeur de AUTO_INCREMENT, nous pouvons utiliser la requête ALTER comme indiqué ci-dessous. Il est facile de définir la valeur AUTO_INCREMENT d'une table vide puisque MySQL n'a pas besoin de faire une copie des lignes existantes pour exécuter la commande ALTER. De plus, nous pouvons soit réinitialiser AUTO_INCREMENT à 1, soit le définir sur n'importe quelle valeur préférée pour démarrer la séquence.

# Syntaxe
ALTER TABLE
AUTO_INCREMENT =;

# Exemples

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

ALTER TABLE user AUTO_INCREMENT =1;

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

Résumé

Ce tutoriel a fourni les requêtes avec des exemples pour obtenir la valeur de l'attribut AUTO_INCREMENT d'une table InnoDB. Il a également fourni des exemples pour mettre à jour l'attribut AUTO_INCREMENT.