sql >> Databasteknik >  >> RDS >> Mysql

Hur man läser och återställer AUTO_INCREMENT i MySQL

Denna handledning tillhandahåller frågan för att återställa AUTO_INCREMENT i MySQL med hjälp av InnoDB Table. Den visar hur man uppdaterar AUTO_INCREMENT-attributet för en InnoDB-tabell.

Försiktighetsåtgärder

Använd inte kommandot ALTER på tabeller med stora data. MySQL tar lång tid att uppdatera tabellen ifall tabellstorleken är stor.

ALTER-kommandot bör endast användas när det verkligen är nödvändigt.

AUTO_INCREMENT kan inte tilldelas ett lägre värde än det maximala antalet befintliga värden.

Skapa en databas och tabell

I det här avsnittet kommer vi att skapa databasen och tabellen som ska användas för att uppdatera attributet 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`));

För att demonstrera AUTO_INCREMENT-operationerna kommer vi att infoga några rader som visas nedan.

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

 

Vi kan få det aktuella AUTO_INCREMENT-värdet för vilken tabell som helst med hjälp av frågan som visas nedan. Det kanske inte återspeglar värdet korrekt eftersom INFORMATION_SCHEMA visar det ungefärliga värdet som kanske inte är det faktiska värdet.

# 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

Vänta nu en minut och utför de nedan nämnda frågorna.

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

Det visar fortfarande AUTO_INCREMENT-värdet som 5, men det förväntade värdet är 6. Det här var vad jag menade med ett ungefärligt värde.

Vi kan också kalla funktionen LAST_INSERT_ID för att få AUTO_INCREMENT värde mindre ett omedelbart efter att INSERT-frågan har körts. Det kanske inte är det bästa att få AUTO_INCREMENT-värde med LAST_INSERT_ID i de flesta scenarierna, särskilt i produktionen.

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

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

Efter att ha kört ovanstående frågor är det förväntade AUTO_INCREMENT-värdet 7, och anrop av LAST_INSERT_ID() visar 6 vilket är korrekt, men det kanske inte är idealiskt att använda LAST_INSERT_ID() för att få AUTO_INCREMENT-värdet.

Ett annat sätt att få AUTO_INCREMENT-värdet är att använda kommandot SHOW som visas nedan. Den visar också det ungefärliga värdet som kanske inte är det faktiska värdet.

# 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ärdet på rader är 4 och Auto_Increment är 5 vilket inte är det faktiska värdet. Dessa är ungefärliga värden.

För att få det exakta värdet kan vi använda kommandot SHOW CREATE som visas nedan.

# 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

Detta visar det exakta värdet för attributet AUTO_INCREMENT.

AUTO_INCREMENT Uppdateringsexempel

För att uppdatera värdet på AUTO_INCREMENT kan vi använda ALTER-frågan som visas nedan. Det är lätt att ställa in AUTO_INCREMENT-värdet för en tom tabell eftersom MySQL inte behöver göra en kopia av de befintliga raderna för att utföra kommandot ALTER. Dessutom kan vi antingen återställa AUTO_INCREMENT till 1 eller ställa in det till valfritt värde för att starta 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;

Sammanfattning

Denna handledning försåg frågorna med exempel för att få värdet av AUTO_INCREMENT-attributet för en InnoDB-tabell. Den gav också exempel för att uppdatera attributet AUTO_INCREMENT.


  1. SQL Server, Hur ställer man in automatisk ökning efter att ha skapat en tabell utan dataförlust?

  2. Använd DATABASEPROPERTYEX() för att returnera databasinställningar i SQL Server

  3. FEL:Ladda lokal data är inaktiverad - detta måste vara aktiverat på både klient- och serversidan

  4. finns det en group_concat-funktion i ms-access?