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

MySQLで最後に挿入された行を取得する方法【LAST_INSERT_ID()の使い方】

MySQLでテーブルにAUTO_INCREMENTカラムが設定されている場合、LAST_INSERT_ID()関数を使うことで、最後に挿入されたレコードのIDを簡単に取得できます。この記事では、実際のSQL例を交えながら、その使い方をわかりやすく解説します。

LAST_INSERT_ID()の基本構文

最後に挿入されたレコードのIDを取得するには、以下の構文を使用します。

SELECT LAST_INSERT_ID();

サンプルテーブルの作成

それでは、実際に動作を確認するためにテーブルを作成してみましょう。以下のクエリでテーブルを作成します。

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

ここでは、IdカラムにAUTO_INCREMENTとPRIMARY KEYを設定し、ユーザー名と年齢を格納するシンプルなテーブルを定義しています。

レコードの挿入

次に、INSERT文を使ってテーブルに複数のレコードを追加します。

mysql> insert into LastInsertedRow(UserName,UserAge) values('John',23);
Query OK, 1 row affected (0.19 sec)
mysql> insert into LastInsertedRow(UserName,UserAge) values('Carol',24);
Query OK, 1 row affected (0.16 sec)
mysql> insert into LastInsertedRow(UserName,UserAge) values('Bob',24);
Query OK, 1 row affected (0.08 sec)
mysql> insert into LastInsertedRow(UserName,UserAge) values('Larry',26);
Query OK, 1 row affected (0.09 sec)
mysql> insert into LastInsertedRow(UserName,UserAge) values('Maxwell',27);
Query OK, 1 row affected (0.10 sec)
mysql> insert into LastInsertedRow(UserName,UserAge) values('David',22);
Query OK, 1 row affected (0.10 sec)

テーブルの全レコードを確認

SELECT文でテーブル内のすべてのレコードを表示して、挿入が正しく行われたかを確認します。

mysql> select *from LastInsertedRow;

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

+----+----------+---------+
| Id | UserName | UserAge |
+----+----------+---------+
|  1 | John     |      23 |
|  2 | Carol    |      24 |
|  3 | Bob      |      24 |
|  4 | Larry    |      26 |
|  5 | Maxwell  |      27 |
|  6 | David    |      22 |
+----+----------+---------+
6 rows in set (0.00 sec)

最後に挿入されたIDを取得する

最後に挿入されたレコードのIDを取得するには、以下のクエリを実行します。

mysql> select last_insert_id();

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

+------------------+
| last_insert_id() |
+------------------+
|                6 |
+------------------+
1 row in set (0.00 sec)

直前に挿入した「David」のレコードに割り当てられたID「6」が返されていることがわかります。

最後に挿入された行全体を取得する

IDだけでなく、レコード全体を取得したい場合は、サブクエリと組み合わせて以下のように記述します。

mysql> select *from LastInsertedRow where Id=(SELECT LAST_INSERT_ID());

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

+----+----------+---------+
| Id | UserName | UserAge |
+----+----------+---------+
|  6 | David    |      22 |
+----+----------+---------+
1 row in set (0.05 sec)

まとめ

AUTO_INCREMENTカラムを持つテーブルでは、LAST_INSERT_ID()を使うことで、最後に挿入されたレコードのIDを簡単に取得できます。さらに、そのIDをWHERE句の条件に使えば、レコード全体を取り出すことも可能です。なお、LAST_INSERT_ID()は接続ごとに管理されるため、他のクライアントの挿入操作に影響されない点も覚えておくと便利です。

  1. MySQLですべてのレコードを1行にまとめて取得する方法(GROUP_CONCAT活用)

    GROUP_CONCAT()を使って複数行のデータを1行に連結するテーブル内の複数レコードを、区切り文字でつなげて1つの文字列として取得したい場合は、MySQLのGROUP_CONCAT()関数を使用します。この関数を使うことで、パスのような形式の文字列も簡単に生成できます。ここでは、「E:/AllPrograms/ChatApplicationInJava/MainFolder」のようにフォルダ階層を表す文字列を作成する例を見ていきましょう。1. サンプルテーブルの作成まず、Locationカラムを持つテーブルを作成します。mysql> create table DemoTable13

  2. MySQLで末尾の文字列に基づいてレコードをソートする方法

    MySQLで文字列の末尾部分(例:「-D」や「-Smith」など)に基づいてレコードをソートしたい場合は、CASE式とORDER BY句を組み合わせることで実現できます。ここでは、実際のサンプルコードを使いながら、手順をわかりやすく解説します。 1. サンプルテーブルの作成 まずはデモ用のテーブルを作成します。顧客ID(ClientId)を自動採番の主キーとし、顧客名(ClientName)を格納するシンプルな構造です。 mysql> create table DemoTable -> ( -> ClientId int NOT NULL AUTO_INC