MySQLでテーブルに自動採番する(AUTO_INCREMENT)

MySQL MySQL

MySQLでテーブルに自動採番する方法について書いています。

テーブル作成時にAUTO_INCREMENTを使うと、指定したカラムに対して、番号を自動で採番してくれます。
また、AUTO_INCREMENTの値を確認する方法とリセットについても記載しました。

MySQLのバージョン8.0.32で、動作を検証しています。

テーブルに自動採番するには?

テーブルに自動採番のカラムを作成するにはAUTO_INCREMENTを使います。
例えば、下記のようにテーブルを作成します。

CREATE TABLE fruits (
  id BIGINT NOT NULL AUTO_INCREMENT,
  name VARCHAR(256),
  price INT,
  PRIMARY KEY (id)
);

果物の名前と価格を管理するfruitsテーブルを作成しました。
1カラム目に型をBIGINTを指定して、AUTO_INCREMENTにしています。

こうすることで、自動でidカラムに対して、数値がカウントアップされて採番されていきます。
例えば、idカラムに値を指定せずに、いくつかのデータを追加してみます。

INSERT INTO fruits (name, price) VALUE ('りんご', '120');
INSERT INTO fruits (name, price) VALUE ('みかん', '110');
INSERT INTO fruits (name, price) VALUE ('ぶどう', '200');

そして、fruitsテーブルのデータをSELECT文で確認します。

SELECT * FROM fruits;

そうすると、下記のように「1」から「3」までの数値がidカラムに自動で採番されました。

id name price
1 りんご 120
2 みかん 110
3 ぶどう 200

AUTO_INCREMENTの値を確認する

AUTO_INCREMENTの次の値を確認するには、SHOW TABLE STATUSを使います。
テーブルの状態を確認できるコマンドです。

SHOW TABLE STATUS WHERE name = "fruits";

SHOW TABLE STATUSで、現在選択中のデータベースに存在するテーブルの情報を表示してくれます。
WHEREでnameカラムを指定することで、fruitsテーブルのみのデータを表示しています。

実行すると、下記のようにfruitsテーブルのデータが表示されました。
Auto_incrementカラムを確認すると、次に設定される値が書かれています。

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
fruits InnoDB 10 Dynamic 3 5461 16384 0 0 0 4 2023-03-12 15:58:44 2023-03-12 16:16:53 NULL utf8mb4_0900_ai_ci NULL

データを3行入れているので、次は「4」になっていることが確認できました。

SHOW TABLE STATUSの情報が更新されない

ちなみに、TRUNCATE TABLEでデータを削除した場合などに、SHOW TABLE STATUSの情報が更新されない場合はキャッシュが効いていることがあります。
こちらの記事にあるようにinformation_schema_stats_expiry変数の値を変えると良いです。

SET information_schema_stats_expiry = 1;

AUTO_INCREMENTの値をリセットする

AUTO_INCREMENTの値のリセットについてです。

AUTO_INCREMENTを初期値に戻す

AUTO_INCREMENTの値を初期値に戻したいときには、データをTRUNCATE TABLEで全て削除すれば、また「1」からカウントアップしてくれます。

TRUNCATE TABLE fruits;

このように任意のテーブルの値を空にして、最初からインサートすれば、また「1」から採番してくれます。

DELETEで消したのでAUTO_INCREMENTを戻したい

DELETE文で値を消したときには、AUTO_INCREMENTの値は進んだままになります。
例えば、 下記のように3件のデータがあります。

id name price
1 りんご 120
2 みかん 110
3 ぶどう 200

このときに2行目と3行目を消します。

DELETE FROM fruits WHERE id IN (2, 3);

そして、1行追加すると、下記のようにidカラムの番号が歯抜けになります。

id name price
1 りんご 120
4 バナナ 220

ALTER TABLEを使うと、任意の位置からAUTO_INCREMENTを始めることができます。
さっきのように、1行目だけ残して、「2」から採番したいときには下記のように設定します。

ALTER TABLE fruits AUTO_INCREMENT = 2;

こうすると、「りんご」の行を残して、次に追加したときには下記のように「2」から採番されます。

id name price
1 りんご 120
2 バナナ 220

MySQLのテーブルに自動採番する方法まとめ

今回はMySQLでテーブルに自動採番する方法について書きました。
記事の内容をまとめると、下記のようになります。

・自動採番するには、自動採番したいカラムに対して、AUTO_INCREMENTを設定する。
・AUTO_INCREMENTの次の値を確認するには`SHOW TABLE STATUS`を使う。
・AUTO_INCREMENTを初期値に戻すには`TRUNCATE TABLE`でデータを消して入れ直すとよい。
・DELETE文でデータを消したときは歯抜けになるので、`ALTER TABLE`で再設定すると良い。

コメント

タイトルとURLをコピーしました