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

MySQLで自動インクリメントされた最大値(ID)を取得して表示する方法

はじめに

MySQLでは、AUTO_INCREMENT属性を設定したカラムの最大値を取得したい場面はよくあります。例えば、最後に登録されたユーザーのIDを確認したり、採番状況を把握したりするケースです。本記事では、サンプルテーブルを作成し、自動インクリメントされたIDの最大値を取得する方法を具体的な手順とともに解説します。

1. サンプルテーブルの作成

まず、UserId を AUTO_INCREMENT の主キーとして設定したテーブルを作成します。

mysql> create table DemoTable
(
    UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    UserName varchar(20)
);
Query OK, 0 rows affected (0.56 sec)

ポイント: AUTO_INCREMENT を指定することで、レコードを挿入するたびに UserId が自動的に連番で採番されます。PRIMARY KEY との組み合わせは非常に一般的な設計パターンです。

2. テストデータの挿入

INSERT 文を使って、複数のレコードを登録します。UserId は指定しないため、自動的に連番が割り当てられます。

mysql> insert into DemoTable(UserName) values('John');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable(UserName) values('Larry');
Query OK, 1 row affected (0.35 sec)
mysql> insert into DemoTable(UserName) values('Chris');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(UserName) values('Bob');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(UserName) values('Carol');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable(UserName) values('David');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable(UserName) values('Robert');
Query OK, 1 row affected (0.20 sec)

3. 登録されたレコードの確認

SELECT 文で全レコードを表示し、データが正しく挿入されているか確認しましょう。

mysql> select * from DemoTable;

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

+--------+----------+
| UserId | UserName |
+--------+----------+
| 1      | John     |
| 2      | Larry    |
| 3      | Chris    |
| 4      | Bob      |
| 5      | Carol    |
| 6      | David    |
| 7      | Robert   |
+--------+----------+
7 rows in set (0.00 sec)

UserId が 1 から 7 まで自動的に採番されていることがわかります。

4. 最大の自動インクリメント値を取得するクエリ

最大の ID を持つレコードを表示するには、ORDER BY 句で降順にソートし、LIMIT で先頭の1件だけを取得します。

mysql> select * from DemoTable order by UserId desc limit 0,1;

実行すると、最も大きい自動インクリメント値を持つレコードが表示されます。

+--------+----------+
| UserId | UserName |
+--------+----------+
| 7      | Robert   |
+--------+----------+
1 row in set (0.00 sec)

補足:別の取得方法

集計関数を使えば、ID の最大値だけをシンプルに取得することもできます。

mysql> select max(UserId) from DemoTable;

また、直前に挿入したレコードの ID が必要な場合は、接続ごとに有効な LAST_INSERT_ID() 関数を使用するのが確実です。

mysql> select last_insert_id();

用途に応じてこれらの方法を使い分けるとよいでしょう。

まとめ

自動インクリメントされた最大値を取得するには、ORDER BY カラム名 DESC LIMIT 1 を使うのが基本です。最大値そのものだけが必要なら MAX() 関数、直前の挿入結果を知りたいなら LAST_INSERT_ID() というように、目的に合った手法を選択しましょう。

  1. MySQLでデータベース図(ER図)を自動生成する方法【MySQL Workbench活用ガイド】

    MySQLでデータベース図(ER図)を自動生成したい場合は、公式GUIツールのMySQL Workbenchを利用するのが最も簡単です。Workbenchには「リバースエンジニアリング(Reverse Engineer)」機能が標準で搭載されており、既存のデータベースから自動的にER図を作成できます。 手順1:「Database」メニューを開く まず、MySQL Workbenchを起動し、上部メニューの「Database」を選択します。メニュー内の以下の項目をクリックしてください。 Database → Reverse Engineer 「Database」タブを開いたところのスクリーンショ

  2. MySQLでデータベース内のテーブル数を表示するクエリの書き方

    INFORMATION_SCHEMA.TABLESを使ってテーブル数を取得するここでは例として、「WEB」というデータベースを使用しているものとします。このデータベース内に存在するテーブルの総数を調べたい場合、MySQLではINFORMATION_SCHEMA.TABLESを利用するのが便利です。INFORMATION_SCHEMAは、MySQLサーバーが管理しているメタデータ(データベース名、テーブル名、カラム情報など)を格納する仮想データベースであり、これを参照することでスキーマに関する情報をSQLで簡単に取得できます。テーブル数を表示するクエリ「WEB」データベース内のテーブル数を表示す