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の次の値を確認するには`SHOW TABLE STATUS`を使う。
・AUTO_INCREMENTを初期値に戻すには`TRUNCATE TABLE`でデータを消して入れ直すとよい。
・DELETE文でデータを消したときは歯抜けになるので、`ALTER TABLE`で再設定すると良い。
コメント