SHOW TABLE STATUSを使わずにMySQLでテーブルのAUTO_INCREMENT値を確認する方法
MySQLでテーブルの次のAUTO_INCREMENT(自動採番)値を確認したい場合、SHOW TABLE STATUS コマンドを使わなくても、INFORMATION_SCHEMA.TABLES を参照することで簡単に取得できます。この記事では、実際にテーブルを作成し、データを挿入したうえで、AUTO_INCREMENT値を照会する手順を解説します。
1. サンプルテーブルの作成
まず、AUTO_INCREMENT列を持つテーブルを作成します。
mysql> create table viewtheauto_incrementValueForATableDemo
-> (
-> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentName varchar(20)
-> );
Query OK, 0 rows affected (0.84 sec)
ここでは StudentId を主キーとするAUTO_INCREMENT列として定義しています。行が挿入されるたびに、IDが自動的に採番されます。
2. レコードの挿入
続いて、INSERT文を使って複数のレコードを登録します。StudentIdは指定しないため、自動的に連番が割り当てられます。
mysql> insert into viewtheauto_incrementValueForATableDemo(StudentName)
values('Ramit');
Query OK, 1 row affected (0.23 sec)
mysql> insert into viewtheauto_incrementValueForATableDemo(StudentName) values('Bob');
Query OK, 1 row affected (0.14 sec)
mysql> insert into viewtheauto_incrementValueForATableDemo(StudentName) values('Chris');
Query OK, 1 row affected (0.15 sec)
mysql> insert into viewtheauto_incrementValueForATableDemo(StudentName)
values('Robert');
Query OK, 1 row affected (0.12 sec)
mysql> insert into viewtheauto_incrementValueForATableDemo(StudentName) values('John');
Query OK, 1 row affected (0.46 sec)
3. 登録されたデータの確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> select * from viewtheauto_incrementValueForATableDemo;
実行結果は以下のとおりです。
+-----------+-------------+ | StudentId | StudentName | +-----------+-------------+ | 1 | Ramit | | 2 | Bob | | 3 | Chris | | 4 | Robert | | 5 | John | +-----------+-------------+ 5 rows in set (0.00 sec)
5件のレコードに対して、IDが1〜5まで自動的に採番されていることがわかります。
4. INFORMATION_SCHEMA.TABLESでAUTO_INCREMENT値を取得
次のAUTO_INCREMENT値を確認するには、information_schema.TABLES テーブルに対して、スキーマ名(データベース名)とテーブル名を条件にクエリを実行します。
mysql> SELECT `AUTO_INCREMENT` AS 'NextAutoIncrementValue'
-> FROM `information_schema`.`TABLES`
-> WHERE `TABLE_SCHEMA` = 'test'
-> AND `TABLE_NAME` = 'viewtheauto_incrementValueForATableDemo';
実行結果:
+------------------------+ | NextAutoIncrementValue | +------------------------+ | 6 | +------------------------+ 1 row in set (0.00 sec)
結果として「6」が返されました。これは、次に挿入されるレコードに割り当てられるStudentIdの値です。
ポイントまとめ
AUTO_INCREMENT列には、次に採番される値がinformation_schema.TABLESのAUTO_INCREMENTカラムに格納されています。TABLE_SCHEMAにはデータベース名、TABLE_NAMEには対象テーブル名を指定します。- SHOW TABLE STATUSの出力全体を見る必要がない場合、この方法なら必要な情報だけをピンポイントで取得でき、スクリプトやアプリケーションからの利用にも便利です。
-
MySQLでテーブルに存在しない値だけを抽出する方法(UNION ALLとNOT EXISTSの活用)
MySQLでテーブルに存在しない値を照会するには? MySQLで「テーブルにまだ登録されていない値だけ」を取得したい場合、UNION ALLとWHERE NOT EXISTSを組み合わせるのが有効です。サブクエリで候補となる値をUNION ALLで列挙し、NOT EXISTSによって既にテーブル内に存在する値を除外することで、存在しない値のみを抽出できます。 ここでは、実際の手順をサンプルコードとともに解説します。 1. サンプルテーブルを作成する まず、自動採番(AUTO_INCREMENT)のカラムを持つテーブルを作成します。 mysql> create table DemoTab
-
MySQLのINSERT INTO SELECT文で別のテーブルの値を挿入する方法
あるテーブルの値を基に別のテーブルへデータを挿入したい場合は、INSERT INTO SELECT文を使用します。この構文では、SELECT文で抽出した結果セットをそのまま対象テーブルへ流し込めるため、テーブル間のデータ移行やコピーにもっとも効率的な方法の一つです。 以下の手順で、実際の動作を順番に確認していきましょう。 手順1:元となるテーブルを作成する まず、データのコピー元となるテーブル「demo82」を作成します。 mysql> create table demo82 -> (