Ten samouczek zawiera zapytanie do zresetowania AUTO_INCREMENT w MySQL przy użyciu tabeli InnoDB. Pokazuje, jak zaktualizować atrybut AUTO_INCREMENT tabeli InnoDB.
Środki ostrożności
Nie używaj polecenia ALTER w tabelach zawierających duże dane. Aktualizacja tabeli przez MySQL zajmuje dużo czasu w przypadku, gdy rozmiar tabeli jest duży.
Polecenie ALTER powinno być używane tylko wtedy, gdy jest to naprawdę konieczne.
AUTO_INCREMENT nie może mieć wartości niższej niż maksymalna z istniejących wartości.
Utwórz bazę danych i tabelę
W tej sekcji utworzymy bazę danych i tabelę, które będą używane do aktualizacji atrybutu 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`));
Aby zademonstrować operacje AUTO_INCREMENT, wstawimy kilka wierszy, jak pokazano poniżej.
# 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 Przeczytaj przykłady
Możemy uzyskać bieżącą wartość AUTO_INCREMENT dla dowolnej tabeli za pomocą zapytania, jak pokazano poniżej. Może nie odzwierciedlać prawidłowo wartości, ponieważ INFORMATION_SCHEMA pokazuje przybliżoną wartość, która może nie być wartością rzeczywistą.
# 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
Teraz poczekaj minutę i wykonaj poniższe zapytania.
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
Nadal pokazuje wartość AUTO_INCREMENT jako 5, ale oczekiwana wartość to 6. To właśnie miałem na myśli z przybliżoną wartością.
Możemy również wywołać funkcję LAST_INSERT_ID aby uzyskać AUTO_INCREMENT wartość mniej jeden natychmiast po wykonaniu zapytania INSERT. W większości scenariuszy, zwłaszcza w środowisku produkcyjnym, uzyskanie wartości AUTO_INCREMENT przy użyciu LAST_INSERT_ID może nie być najlepszym rozwiązaniem.
# Example
INSERT INTO `autoinc`.`user`(`firstName`,`lastName`,`username`) values('Nicolas', 'Dave', 'nicolas' );
SELECT LAST_INSERT_ID() as `id`;
# Result
---------------
id
---------------
6
Po wykonaniu powyższych zapytań oczekiwana wartość AUTO_INCREMENT wynosi 7, a wywołanie LAST_INSERT_ID() pokazuje 6, co jest poprawne, ale użycie LAST_INSERT_ID() w celu uzyskania wartości AUTO_INCREMENT może nie być idealne.
Innym sposobem uzyskania wartości AUTO_INCREMENT jest użycie polecenia SHOW, jak pokazano poniżej. Pokazuje również przybliżoną wartość, która może nie być wartością rzeczywistą.
# 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
Wartość Rows to 4, a Auto_Increment to 5, co nie jest wartością rzeczywistą. Są to wartości przybliżone.
Aby uzyskać dokładną wartość, możemy użyć polecenia SHOW CREATE jak pokazano poniżej.
# 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
Pokazuje dokładną wartość atrybutu AUTO_INCREMENT.
Przykłady aktualizacji AUTO_INCREMENT
Aby zaktualizować wartość AUTO_INCREMENT, możemy użyć zapytania ALTER, jak pokazano poniżej. Łatwo jest ustawić wartość AUTO_INCREMENT pustej tabeli, ponieważ MySQL nie musi tworzyć kopii istniejących wierszy, aby wykonać polecenie ALTER. Ponadto możemy albo zresetować AUTO_INCREMENT do 1 lub ustawić na dowolną preferowaną wartość, aby rozpocząć sekwencję.
# 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;
Podsumowanie
Ten samouczek zawierał zapytania z przykładami, aby uzyskać wartość atrybutu AUTO_INCREMENT tabeli InnoDB. Zawiera również przykłady aktualizacji atrybutu AUTO_INCREMENT.