MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLで次の自動インクリメントIDを取得する方法

MySQLには、自動採番(オートインクリメント)を実現するためのAUTO_INCREMENTキーワードが用意されています。開始値はデフォルトで「1」に設定されており、新しいレコードが挿入されるたびに1ずつ加算されていきます。

MySQLで次の自動インクリメントIDを取得したい場合は、last_insert_id()関数を使う方法と、information_schemaのAUTO_INCREMENT値をSELECT文で参照する方法の2つがあります。本記事では後者の方法を具体的な例とともに解説します。

1. 自動インクリメント付きテーブルの作成

まず、「id」カラムを自動インクリメントに設定したテーブルを作成します。

mysql> create table NextIdDemo
   -> (
   -> id int auto_increment,
   -> primary key(id)
   -> );
Query OK, 0 rows affected (1.31 sec)

2. レコードの挿入

続いて、作成したテーブルにレコードを挿入します。

mysql> insert into NextIdDemo values(1);
Query OK, 1 row affected (0.22 sec)

mysql> insert into NextIdDemo values(2);
Query OK, 1 row affected (0.20 sec)

mysql> insert into NextIdDemo values(3);
Query OK, 1 row affected (0.14 sec)

3. 登録済みデータの確認

テーブル内の全レコードを表示して内容を確認しましょう。

mysql> select * from NextIdDemo;

実行結果は以下の通りです。

+----+
| id |
+----+
|  1 |
|  2 |
|  3 |
+----+
3 rows in set (0.04 sec)

上記のように3件のレコードが登録されています。したがって、次に採番されるIDは「4」になるはずです。

4. 次の自動インクリメントIDを取得する構文

次に採番されるIDを事前に知りたい場合は、information_schema.TABLESテーブルを参照します。基本の構文は以下の通りです。

SELECT AUTO_INCREMENT
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = "yourDatabaseName"
AND TABLE_NAME = "yourTableName";
  • TABLE_SCHEMA:対象のデータベース名を指定します。
  • TABLE_NAME:対象のテーブル名を指定します。

5. 実際のクエリ例

ここでは、データベース「business」内のテーブル「NextIdDemo」に対して実行してみます。

mysql> SELECT AUTO_INCREMENT
    -> FROM information_schema.TABLES
    -> WHERE TABLE_SCHEMA = "business"
    -> AND TABLE_NAME = "NextIdDemo";

実行結果は以下の通りです。次の自動インクリメント値である「4」が表示されました。

+----------------+
| AUTO_INCREMENT |
+----------------+
|              4 |
+----------------+
1 row in set (0.25 sec)

まとめ

このように、information_schema.TABLESを照会することで、実際にINSERTを実行する前に次に採番されるIDを確認できます。トランザクション処理や関連テーブルへの事前登録など、IDを先に把握しておきたい場面で非常に便利なテクニックです。なお、同時接続環境では他セッションの挿入により値が変動する可能性がある点には注意してください。

  1. MySQLで2つのカラムの値のうち最大値を取得する方法【GREATEST()関数】

    MySQLで2つのカラム(列)の値を比較し、大きい方の値を取得したい場合は、GREATEST()関数を使用します。この関数は、引数として渡された複数の値の中から最も大きい値を返します。GREATEST()関数の基本構文基本的な構文は以下の通りです。AS句を使えば、結果のカラムに任意の別名(エイリアス)を付けることができます。select greatest(yourColumnName1,yourColumnName2) AS anyAliasName from yourTableName; サンプルテーブルの作成まず、動作を確認するためのテーブルを作成しましょう。mysql>

  2. MySQLのCURDATE()で前日(昨日)の日付を取得する方法

    はじめに:CURDATE()で現在の日付を確認するまず、CURDATE()関数を使って現在の日付を取得してみましょう。以下のように実行すると、本日の日付が表示されます。mysql> select CURDATE(); +------------+ | CURDATE() | +------------+ | 2019-06-09 | +------------+ 1 row in set (0.00 sec)現在の日付は「2019-06-09」であることが確認できました。サンプルテーブルを作成する続いて、動作確認用のテーブルを作成します。ここでは、IDと出荷日(ShippingDate