このチュートリアルでは、InnoDBテーブルを使用してMySQLのAUTO_INCREMENTをリセットするためのクエリを提供します。 InnoDBテーブルのAUTO_INCREMENT属性を更新する方法を示しています。
注意事項
大きなデータを持つテーブルでは、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
ここで、1分待ってから、以下のクエリを実行します。
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クエリを実行した直後。特に本番環境のほとんどのシナリオでは、LAST_INSERT_IDを使用してAUTO_INCREMENT値を取得するのは最善ではない場合があります。
# 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
Rowsの値は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クエリを使用できます。 MySQLはALTERコマンドを実行するために既存の行のコピーを作成する必要がないため、空のテーブルのAUTO_INCREMENT値を設定するのは簡単です。また、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;
概要
このチュートリアルでは、InnoDBテーブルのAUTO_INCREMENT属性の値を取得するための例をクエリに提供しました。 AUTO_INCREMENT属性を更新するための例も提供しました。