sql >> データベース >  >> RDS >> Mysql

MySQLでAUTO_INCREMENTを読み取ってリセットする方法

    このチュートリアルでは、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属性を更新するための例も提供しました。


    1. すべての便利な11gダイナミックパフォーマンスビュー

    2. 月と年によるSQLのグループ化

    3. Oracle®のSQLServerストアドプロシージャ

    4. 'ANY'を含むPostgreSQLクエリが機能していません