Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie man AUTO_INCREMENT in MySQL liest und zurücksetzt

Dieses Tutorial stellt die Abfrage zum Zurücksetzen von AUTO_INCREMENT in MySQL mithilfe von InnoDB Table bereit. Es zeigt, wie das Attribut AUTO_INCREMENT einer InnoDB-Tabelle aktualisiert wird.

Vorsichtsmaßnahmen

Verwenden Sie den ALTER-Befehl nicht für Tabellen mit großen Datenmengen. MySQL braucht lange, um die Tabelle zu aktualisieren, falls die Tabellengröße groß ist.

Der ALTER-Befehl sollte nur verwendet werden, wenn es wirklich notwendig ist.

Das AUTO_INCREMENT kann nicht mit einem niedrigeren Wert als dem Maximum der vorhandenen Werte zugewiesen werden.

Datenbank und Tabelle erstellen

In diesem Abschnitt erstellen wir die Datenbank und die Tabelle, die zum Aktualisieren des AUTO_INCREMENT-Attributs verwendet werden sollen.

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

Um die AUTO_INCREMENT-Operationen zu demonstrieren, fügen wir wie unten gezeigt einige Zeilen ein.

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

 

Wir können den aktuellen AUTO_INCREMENT-Wert für jede Tabelle mit der unten gezeigten Abfrage abrufen. Es gibt den Wert möglicherweise nicht korrekt wieder, da das INFORMATION_SCHEMA den ungefähren Wert anzeigt, der möglicherweise nicht der tatsächliche Wert ist.

# 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

Warten Sie nun eine Minute und führen Sie die unten aufgeführten Abfragen aus.

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

Es zeigt immer noch den AUTO_INCREMENT-Wert als 5 an, aber der erwartete Wert ist 6. Das habe ich mit einem ungefähren Wert gemeint.

Wir können auch die Funktion LAST_INSERT_ID aufrufen um das AUTO_INCREMENT zu erhalten Wert weniger eins unmittelbar nach Ausführung der INSERT-Abfrage. Es ist möglicherweise nicht das Beste, den AUTO_INCREMENT-Wert mit LAST_INSERT_ID in den meisten Szenarien zu erhalten, insbesondere in der Produktion.

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

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

Nach Ausführung der obigen Abfragen ist der erwartete AUTO_INCREMENT-Wert 7, und der Aufruf von LAST_INSERT_ID() zeigt 6, was korrekt ist, aber es ist möglicherweise nicht ideal, LAST_INSERT_ID() zu verwenden, um den AUTO_INCREMENT-Wert zu erhalten.

Eine andere Möglichkeit, den AUTO_INCREMENT-Wert abzurufen, ist die Verwendung des SHOW-Befehls, wie unten gezeigt. Es zeigt auch den ungefähren Wert, der möglicherweise nicht der tatsächliche Wert ist.

# 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

Der Wert von Rows ist 4 und Auto_Increment ist 5, was nicht der tatsächliche Wert ist. Dies sind ungefähre Werte.

Um den genauen Wert zu erhalten, können wir den Befehl SHOW CREATE verwenden wie unten gezeigt.

# 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

Dies zeigt den genauen Wert des Attributs AUTO_INCREMENT.

AUTO_INCREMENT Aktualisierungsbeispiele

Um den Wert von AUTO_INCREMENT zu aktualisieren, können wir die ALTER-Abfrage wie unten gezeigt verwenden. Es ist einfach, den AUTO_INCREMENT-Wert einer leeren Tabelle festzulegen, da MySQL keine Kopie der vorhandenen Zeilen erstellen muss, um den ALTER-Befehl auszuführen. Außerdem können wir AUTO_INCREMENT entweder auf 1 zurücksetzen oder auf einen beliebigen bevorzugten Wert setzen, um die Sequenz zu 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;

Zusammenfassung

Dieses Tutorial stellte die Abfragen mit Beispielen bereit, um den Wert des Attributs AUTO_INCREMENT einer InnoDB-Tabelle abzurufen. Außerdem wurden Beispiele zum Aktualisieren des Attributs AUTO_INCREMENT bereitgestellt.