sql >> Database teknologi >  >> RDS >> Mysql

Sådan læser og nulstiller du AUTO_INCREMENT i MySQL

Denne vejledning indeholder forespørgslen om at nulstille AUTO_INCREMENT i MySQL ved hjælp af InnoDB Table. Det viser, hvordan man opdaterer AUTO_INCREMENT-attributten for en InnoDB-tabel.

Forholdsregler

Brug ikke ALTER-kommandoen på tabeller med store data. MySQL tager lang tid at opdatere tabellen i tilfælde af, at tabelstørrelsen er stor.

ALTER-kommandoen bør kun bruges, når det virkelig er nødvendigt.

AUTO_INCREMENT kan ikke tildeles en lavere værdi end maksimum af eksisterende værdier.

Opret en database og tabel

I dette afsnit vil vi oprette databasen og tabellen, der skal bruges til at opdatere AUTO_INCREMENT-attributten.

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

For at demonstrere AUTO_INCREMENT-operationerne vil vi indsætte et par rækker som vist nedenfor.

# 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 Læs eksempler

 

Vi kan få den aktuelle AUTO_INCREMENT-værdi for enhver tabel ved hjælp af forespørgslen som vist nedenfor. Det afspejler muligvis ikke værdien korrekt, da INFORMATION_SCHEMA viser den omtrentlige værdi, som muligvis ikke er den faktiske værdi.

# 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

Vent nu et minut og udfør nedenstående forespørgsler.

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

Den viser stadig AUTO_INCREMENT-værdien som 5, men den forventede værdi er 6. Det var det, jeg mente med en omtrentlig værdi.

Vi kan også kalde funktionen LAST_INSERT_ID for at få AUTO_INCREMENT værdi mindre én umiddelbart efter at have udført INSERT-forespørgslen. Det er måske ikke det bedste at få AUTO_INCREMENT-værdi ved hjælp af LAST_INSERT_ID i de fleste scenarier, især i produktionen.

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

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

Efter at have udført ovenstående forespørgsler, er den forventede AUTO_INCREMENT-værdi 7, og kald af LAST_INSERT_ID() viser 6, hvilket er korrekt, men det er muligvis ikke ideelt at bruge LAST_INSERT_ID() til at få AUTO_INCREMENT-værdien.

En anden måde at få AUTO_INCREMENT-værdien på er ved at bruge SHOW-kommandoen som vist nedenfor. Den viser også den omtrentlige værdi, som muligvis ikke er den faktiske værdi.

# 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

Værdien af ​​Rows er 4 og Auto_Increment er 5, hvilket ikke er den faktiske værdi. Disse er omtrentlige værdier.

For at få den nøjagtige værdi kan vi bruge kommandoen SHOW CREATE som vist nedenfor.

# 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

Dette viser den nøjagtige værdi af AUTO_INCREMENT-attributten.

AUTO_INCREMENT Opdateringseksempler

For at opdatere værdien af ​​AUTO_INCREMENT kan vi bruge ALTER-forespørgslen som vist nedenfor. Det er nemt at indstille AUTO_INCREMENT-værdien for en tom tabel, da MySQL ikke behøver at lave en kopi af de eksisterende rækker for at udføre ALTER-kommandoen. Vi kan også enten nulstille AUTO_INCREMENT til 1 eller indstille den til en hvilken som helst foretrukken værdi for at starte sekvensen.

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

Oversigt

Denne vejledning forsynede forespørgslerne med eksempler for at få værdien af ​​AUTO_INCREMENT-attributten for en InnoDB-tabel. Det gav også eksempler på at opdatere AUTO_INCREMENT-attributten.


  1. Sådan tester du PHP MySQL-databaseforbindelse ved hjælp af script

  2. Nulstil sekvensværdien til 1

  3. SQLite omdøber PRINTF() til FORMAT()

  4. Hvordan opretter man forbindelse til MS SQL Server ved hjælp af Inno Setup?