Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak czytać i resetować AUTO_INCREMENT w MySQL?

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wydajność MYSQL OR vs IN

  2. Składnia SQL DROP TABLE — wymienione przez DBMS

  3. Praca z kolumnami MySQL TIMESTAMP w SQL Server

  4. PERIOD_ADD() Przykłady – MySQL

  5. Podgląd obrazu i przesyłanie za pomocą bazy danych PHP i MySQL