Този урок предоставя заявката за нулиране на AUTO_INCREMENT в MySQL с помощта на таблица InnoDB. Показва как да актуализирате атрибута AUTO_INCREMENT на таблица InnoDB.
Предпазни мерки
Не използвайте командата ALTER върху таблици с големи данни. MySQL отнема много време, за да актуализира таблицата, в случай че размерът на таблицата е голям.
Командата ALTER трябва да се използва само когато наистина е необходимо.
AUTO_INCREMENT не може да бъде присвоена с по-ниска стойност от максималната съществуващи стойности.
Създайте база данни и таблица
В този раздел ще създадем базата данни и таблицата, които да се използват за актуализиране на атрибута 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`));
За да демонстрираме операциите AUTO_INCREMENT, ще вмъкнем няколко реда, както е показано по-долу.
# 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 Прочетете примери
Можем да получим текущата стойност AUTO_INCREMENT за всяка таблица, използвайки заявката, както е показано по-долу. Може да не отразява правилно стойността, тъй като INFORMATION_SCHEMA показва приблизителната стойност, която може да не е действителната стойност.
# 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
Сега изчакайте една минута и изпълнете посочените по-долу заявки.
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
Той все още показва стойността AUTO_INCREMENT като 5, но очакваната стойност е 6. Това имах предвид с приблизителна стойност.
Можем също да извикаме функцията LAST_INSERT_ID за да получите AUTO_INCREMENT стойностпо-малко един веднага след изпълнение на заявката INSERT. Може да не е най-добре да получите стойност AUTO_INCREMENT с помощта на LAST_INSERT_ID в повечето сценарии, особено в производството.
# Example
INSERT INTO `autoinc`.`user`(`firstName`,`lastName`,`username`) values('Nicolas', 'Dave', 'nicolas' );
SELECT LAST_INSERT_ID() as `id`;
# Result
---------------
id
---------------
6
След изпълнение на горните заявки, очакваната стойност на AUTO_INCREMENT е 7, а извикването на LAST_INSERT_ID() показва 6, което е правилно, но може да не е идеално да използвате LAST_INSERT_ID(), за да получите стойността на AUTO_INCREMENT.
Друг начин да получите стойността AUTO_INCREMENT е като използвате командата SHOW, както е показано по-долу. Той също така показва приблизителната стойност, която може да не е действителната стойност.
# 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
Стойността на редовете е 4, а Auto_Increment е 5, което не е действителната стойност. Това са приблизителни стойности.
За да получите точната стойност, можем да използваме командата SHOW CREATE както е показано по-долу.
# 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
Това показва точната стойност на атрибута AUTO_INCREMENT.
AUTO_INCREMENT Примери за актуализиране
За да актуализираме стойността на AUTO_INCREMENT, можем да използваме заявката ALTER, както е показано по-долу. Лесно е да зададете стойността AUTO_INCREMENT на празна таблица, тъй като MySQL не трябва да прави копие на съществуващите редове, за да изпълни командата ALTER. Също така можем да нулираме AUTO_INCREMENT на 1 или да го зададем на която и да е предпочитана стойност, за да започне последователността.
# 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;
Резюме
Този урок предостави на заявките примери за получаване на стойността на атрибута AUTO_INCREMENT на таблица InnoDB. Той също така предостави примери за актуализиране на атрибута AUTO_INCREMENT.