sql >> Databáze >  >> RDS >> Mysql

Jak číst a resetovat AUTO_INCREMENT v MySQL

Tento tutoriál poskytuje dotaz na resetování AUTO_INCREMENT v MySQL pomocí tabulky InnoDB. Ukazuje, jak aktualizovat atribut AUTO_INCREMENT tabulky InnoDB.

Bezpečnostní opatření

Příkaz ALTER nepoužívejte na tabulkách s velkými daty. MySQL trvá dlouho, než aktualizuje tabulku v případě, že je velikost tabulky velká.

Příkaz ALTER by měl být používán pouze tehdy, když je to skutečně nutné.

AUTO_INCREMENT nemůže být přiřazena s nižší hodnotou, než je maximum existujících hodnot.

Vytvořte databázi a tabulku

V této části vytvoříme databázi a tabulku, která se použije k aktualizaci atributu 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`));

Abychom předvedli operace AUTO_INCREMENT, vložíme několik řádků, jak je uvedeno níže.

# 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 Příklady čtení

 

Aktuální hodnotu AUTO_INCREMENT pro libovolnou tabulku můžeme získat pomocí dotazu, jak je uvedeno níže. Nemusí správně odrážet hodnotu, protože INFORMAČNÍ SCHÉMA ukazuje přibližnou hodnotu, která nemusí být skutečnou hodnotou.

# 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

Nyní počkejte minutu a proveďte níže uvedené dotazy.

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

Stále zobrazuje hodnotu AUTO_INCREMENT jako 5, ale očekávaná hodnota je 6. To je to, co jsem myslel s přibližnou hodnotou.

Můžeme také zavolat funkci LAST_INSERT_ID abyste získali AUTO_INCREMENT hodnota méně jedna ihned po provedení dotazu INSERT. Ve většině scénářů nemusí být nejlepší získat hodnotu AUTO_INCREMENT pomocí LAST_INSERT_ID, zejména v produkci.

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

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

Po provedení výše uvedených dotazů je očekávaná hodnota AUTO_INCREMENT 7 a volání LAST_INSERT_ID() ukazuje 6, což je správné, ale nemusí být ideální použít LAST_INSERT_ID() k získání hodnoty AUTO_INCREMENT.

Dalším způsobem, jak získat hodnotu AUTO_INCREMENT, je použití příkazu SHOW, jak je znázorněno níže. Zobrazuje také přibližnou hodnotu, která nemusí být skutečnou hodnotou.

# 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

Hodnota řádků je 4 a Auto_Increment je 5, což není skutečná hodnota. Toto jsou přibližné hodnoty.

K získání přesné hodnoty můžeme použít příkaz SHOW CREATE jak je uvedeno níže.

# 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

To ukazuje přesnou hodnotu atributu AUTO_INCREMENT.

Příklady aktualizací AUTO_INCREMENT

K aktualizaci hodnoty AUTO_INCREMENT můžeme použít dotaz ALTER, jak je uvedeno níže. Je snadné nastavit hodnotu AUTO_INCREMENT prázdné tabulky, protože MySQL nepotřebuje vytvářet kopie existujících řádků, aby mohl provést příkaz ALTER. Také můžeme buď resetovat AUTO_INCREMENT na 1, nebo jej nastavit na libovolnou preferovanou hodnotu pro zahájení sekvence.

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

Shrnutí

Tento kurz poskytl dotazy s příklady pro získání hodnoty atributu AUTO_INCREMENT tabulky InnoDB. Poskytuje také příklady aktualizace atributu AUTO_INCREMENT.


  1. PLSQL Vložit do s poddotazem a návratovou klauzulí

  2. Jak monitorovat databáze MySQL/MariaDB pomocí Netdata na CentOS 7

  3. Určete pořadí na základě více sloupců v MySQL

  4. Jaký je v databázi Oracle rozdíl mezi ROWNUM a ROW_NUMBER?