Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да четете и нулирате AUTO_INCREMENT в MySQL

Този урок предоставя заявката за нулиране на 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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Какво да проверите дали използването на паметта на MySQL е високо

  2. MySQL низови функции (пълен списък)

  3. Въведение във Firebase

  4. Върнете ред само ако стойността не съществува

  5. PHP PDO:набор от знаци, имена на набори?