どうだったっけなって度々思ってしまうので備忘録として。
確認環境はMySQL 8.0.29 – MySQL Community Server – GPLです。
現在の設定値確認方法
テスト用テーブル
以下のテーブルをテスト用として用意しました。
CREATE TABLE `user` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL,
`del` tinyint NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
オートインクリメントの現在値の確認
-- フォーマット
SELECT TABLE_SCHEMA, TABLE_NAME, AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'DB名' AND TABLE_NAME = 'テーブル名';
-- 具体例
SELECT TABLE_SCHEMA, TABLE_NAME, AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'autoincre_test' AND TABLE_NAME = 'user';
注意点があります。
上記のSQLで値は確認できるようなのですが・・・
MySQL8からは結果がキャッシュされるようになっているようです。
僕もこの記事を書く時に結果が更新されないことに悩みました。information_schema_stats_expiryという値がキャッシュ時間に関係しているとのことです。
参考記事:https://yoku0825.blogspot.com/2019/05/mysql-80show-table-status.html
information_schema_stats_expiryで検索すると参考記事が出てきます。
information_schema_stats_expiryを設定せずに結果を確認する方法としてshow create tableを実行する方法があります。
ためしに以下のSQLで1レコード投入すると
INSERT INTO `user` (`id`, `name`, `email`, `del`) VALUES (NULL, 'ユーザ1', 'user1@example.com', '0');
show create table でAUTO_INCREMENTの値を確認することができます。
CREATE TABLE `user` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL,
`del` tinyint NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
ID指定でinsertした時にauto_incrementの値は移動する?
すでにデータが入っている状態でAUTO_INCREMENTの値よりも大きいIDを指定してINSERTした場合、AUTO_INCREMENTの値は移動してくれるのでしょうか。
↑で使用したテーブルの状態で引き続きSQLを実行します。
INSERT INTO user (id, name, email, del) values (30, 'ユーザ30', 'user30@example.com', 0);
オートインクリメントの値も変わってくれました!
CREATE TABLE `user` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL,
`del` tinyint NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_c
コメント