Mysql
 sql >> Database >  >> RDS >> Mysql

Come leggere e ripristinare AUTO_INCREMENT in MySQL

Questo tutorial fornisce la query per reimpostare AUTO_INCREMENT in MySQL utilizzando la tabella InnoDB. Mostra come aggiornare l'attributo AUTO_INCREMENT di una tabella InnoDB.

Precauzioni

Non utilizzare il comando ALTER su tabelle con dati di grandi dimensioni. MySQL impiega molto tempo per aggiornare la tabella nel caso in cui la dimensione della tabella sia grande.

Il comando ALTER va usato solo quando è veramente necessario.

L'AUTO_INCREMENT non può essere assegnato con un valore inferiore al massimo dei valori esistenti.

Crea un database e una tabella

In questa sezione creeremo il database e la tabella da utilizzare per aggiornare l'attributo 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`));

Per dimostrare le operazioni AUTO_INCREMENT, inseriremo alcune righe come mostrato di seguito.

# 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 Leggi esempi

 

Possiamo ottenere il valore AUTO_INCREMENT corrente per qualsiasi tabella utilizzando la query come mostrato di seguito. Potrebbe non riflettere correttamente il valore poiché INFORMATION_SCHEMA mostra il valore approssimativo che potrebbe non essere il valore effettivo.

# 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

Ora attendi un minuto ed esegui le query indicate di seguito.

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

Mostra ancora il valore AUTO_INCREMENT come 5, ma il valore previsto è 6. Questo è ciò che intendevo con un valore approssimativo.

Possiamo anche chiamare la funzione LAST_INSERT_ID per ottenere l'AUTO_INCREMENT valore meno uno subito dopo aver eseguito la query INSERT. Potrebbe non essere il migliore per ottenere il valore AUTO_INCREMENT utilizzando LAST_INSERT_ID nella maggior parte degli scenari, specialmente in produzione.

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

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

Dopo aver eseguito le query precedenti, il valore AUTO_INCREMENT previsto è 7 e la chiamata a LAST_INSERT_ID() mostra 6 che è corretto, ma potrebbe non essere l'ideale utilizzare LAST_INSERT_ID() per ottenere il valore AUTO_INCREMENT.

Un altro modo per ottenere il valore AUTO_INCREMENT consiste nell'usare il comando SHOW come mostrato di seguito. Mostra anche il valore approssimativo che potrebbe non essere il valore effettivo.

# 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

Il valore di Rows è 4 e Auto_Increment è 5 che non è il valore effettivo. Questi sono valori approssimativi.

Per ottenere il valore esatto, possiamo utilizzare il comando SHOW CREATE come mostrato di seguito.

# 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

Questo mostra il valore esatto dell'attributo AUTO_INCREMENT.

Esempi di aggiornamento AUTO_INCREMENT

Per aggiornare il valore di AUTO_INCREMENT, possiamo utilizzare la query ALTER come mostrato di seguito. È facile impostare il valore AUTO_INCREMENT di una tabella vuota poiché MySQL non ha bisogno di fare una copia delle righe esistenti per eseguire il comando ALTER. Inoltre, possiamo reimpostare AUTO_INCREMENT su 1 o impostarlo su qualsiasi valore preferito per avviare la sequenza.

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

Riepilogo

Questo tutorial ha fornito alle query esempi per ottenere il valore dell'attributo AUTO_INCREMENT di una tabella InnoDB. Ha anche fornito esempi per aggiornare l'attributo AUTO_INCREMENT.