sql >> Database >  >> RDS >> Mysql

Hoe AUTO_INCREMENT te lezen en te resetten in MySQL

Deze zelfstudie biedt de vraag om AUTO_INCREMENT opnieuw in te stellen in MySQL met behulp van InnoDB Table. Het laat zien hoe u het AUTO_INCREMENT-kenmerk van een InnoDB-tabel kunt bijwerken.

Voorzorgsmaatregelen

Gebruik de opdracht ALTER niet voor tabellen met veel gegevens. MySQL duurt lang om de tabel bij te werken als de tabel groot is.

Het ALTER-commando mag alleen worden gebruikt als het echt nodig is.

De AUTO_INCREMENT kan niet worden toegewezen met een lagere waarde dan het maximum van bestaande waarden.

Maak een database en tabel

In deze sectie zullen we de database en de tabel maken die moeten worden gebruikt om het AUTO_INCREMENT-kenmerk bij te werken.

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

Om de AUTO_INCREMENT-bewerkingen te demonstreren, zullen we een paar rijen invoegen, zoals hieronder weergegeven.

# 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 Voorbeelden lezen

 

We kunnen de huidige AUTO_INCREMENT-waarde voor elke tabel krijgen met behulp van de onderstaande query. Het kan zijn dat de waarde niet correct wordt weergegeven, aangezien INFORMATION_SCHEMA de geschatte waarde weergeeft die mogelijk niet de werkelijke waarde is.

# 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

Wacht nu een minuut en voer de onderstaande vragen uit.

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

Het toont nog steeds de AUTO_INCREMENT-waarde als 5, maar de verwachte waarde is 6. Dit bedoelde ik met een geschatte waarde.

We kunnen ook de functie LAST_INSERT_ID . aanroepen om de AUTO_INCREMENT . te krijgen waarde minder één onmiddellijk na het uitvoeren van de INSERT-query. Het is misschien niet de beste om de AUTO_INCREMENT-waarde te verkrijgen met LAST_INSERT_ID in de meeste scenario's, vooral in productie.

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

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

Na het uitvoeren van de bovenstaande query's is de verwachte AUTO_INCREMENT-waarde 7, en als u LAST_INSERT_ID() aanroept, wordt 6 weergegeven, wat correct is, maar het is misschien niet ideaal om LAST_INSERT_ID() te gebruiken om de AUTO_INCREMENT-waarde te krijgen.

Een andere manier om de AUTO_INCREMENT-waarde te krijgen, is door het SHOW-commando te gebruiken, zoals hieronder wordt weergegeven. Het toont ook de geschatte waarde die mogelijk niet de werkelijke waarde is.

# 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

De waarde van rijen is 4 en Auto_Increment is 5, wat niet de werkelijke waarde is. Dit zijn geschatte waarden.

Om de exacte waarde te krijgen, kunnen we het commando SHOW CREATE gebruiken zoals hieronder weergegeven.

# 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

Dit toont de exacte waarde van het AUTO_INCREMENT attribuut.

AUTO_INCREMENT Updatevoorbeelden

Om de waarde van AUTO_INCREMENT bij te werken, kunnen we de ALTER-query gebruiken, zoals hieronder wordt weergegeven. Het is gemakkelijk om de AUTO_INCREMENT-waarde van een lege tabel in te stellen, aangezien MySQL geen kopie van de bestaande rijen hoeft te maken om het ALTER-commando uit te voeren. We kunnen ook AUTO_INCREMENT resetten naar 1 of het instellen op een gewenste waarde om de reeks te starten.

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

Samenvatting

Deze zelfstudie voorzag de query's van voorbeelden om de waarde van het AUTO_INCREMENT-kenmerk van een InnoDB-tabel te krijgen. Het bevatte ook voorbeelden om het AUTO_INCREMENT-kenmerk bij te werken.


  1. Mysql voegt willekeurige datetime in een bepaald datetime-bereik in

  2. Geen geldige maand tijdens het invoegen van gegevens in oracle

  3. Wat is het verschil tussen een tijdelijke tabel en een tabelvariabele in SQL Server?

  4. Prestaties van de COUNT SQL-functie