MySQL で最後に挿入されたレコードの ID を取得する

Mehvish Ashiq 2023年6月20日
  1. MySQL テーブルに最後に挿入されたレコードの ID を取得する
  2. LAST_INSERT_ID() 関数を使用して、MySQL で最後に挿入された行の ID を取得する
  3. MAX() 関数を使用して、MySQL で最後に挿入された行の ID を取得する
  4. ORDER BY DESC を使用して、MySQL で最後に挿入された行の ID を取得する
MySQL で最後に挿入されたレコードの ID を取得する

このチュートリアルでは、LAST_INSERT_ID()MAX()、および ORDER BY DESC という名前の 3つのアプローチをコード例で説明し、MySQL で最後に挿入されたレコードの ID を取得する方法を示します。

MySQL テーブルに最後に挿入されたレコードの ID を取得する

MySQL テーブルに最後に挿入されたレコードの ID を取得するために使用できる 3つの方法があります。 これらはすべて以下にリストされており、次のアプローチのいずれかを使用するには、テーブルに AUTO_INCREMENT フィールドが必要です。

  1. LAST_INSERT_ID() 関数を使用します。
  2. max() 関数を使用します。
  3. ORDER BY DESC 句を使用します。

LAST_INSERT_ID() 関数を使用して、MySQL で最後に挿入された行の ID を取得する

LAST INSERT ID() 関数は、AUTO INCREMENT フィールドを持つテーブルで INSERT または UPDATE コマンドを使用する場合、最後に挿入または更新されたレコード (行) の ID を取得するために使用できます。

tb_courses テーブルを準備し、サンプル データを入力して、それを理解しましょう。

クエリの例:

# create a table
CREATE TABLE tb_courses (
      ID INT NOT NULL AUTO_INCREMENT,
      COURSE_NAME VARCHAR(255) NOT NULL,
      PRIMARY KEY (id)
);

# insert data
INSERT INTO tb_courses (COURSE_NAME) VALUES ('Introduction to Java');
INSERT INTO tb_courses (COURSE_NAME) VALUES ('Python for Beginners');
INSERT INTO tb_courses (COURSE_NAME) VALUES('Database Systems');

# display data
SELECT * FROM tb_courses;

出力:

+----+----------------------+
| ID | COURSE_NAME          |
+----+----------------------+
|  1 | Introduction to Java |
|  2 | Python for Beginners |
|  3 | Database Systems     |
+----+----------------------+
3 rows in set (0.00 sec)

次に、次のコマンドを実行して、最後に挿入されたレコードの ID を取得します。

クエリの例:

SELECT LAST_INSERT_ID();

出力:

+------------------+
| LAST_INSERT_ID() |
+------------------+
|                3 |
+------------------+
1 row in set (0.00 sec)

正しい値を返します。3 は最後に挿入された ID です。 ここで、さらにデータを INSERT し、複数の行を挿入します。

クエリの例:

# insert data
INSERT INTO tb_courses (COURSE_NAME)
VALUES
('Introduction to Machine Learning'),
('Deep Learning'),
('Statistics');

# display data
SELECT * FROM tb_courses;

出力:

+----+----------------------------------+
| ID | COURSE_NAME                      |
+----+----------------------------------+
|  1 | Introduction to Java             |
|  2 | Python for Beginners             |
|  3 | Database Systems                 |
|  4 | Introduction to Machine Learning | <======================
|  5 | Deep Learning                    |
|  6 | Statistics                       |
+----+----------------------------------+
6 rows in set (0.00 sec)

次のクエリを実行して、最後に挿入された ID を取得します。

クエリの例:

SELECT LAST_INSERT_ID();

出力:

+------------------+
| LAST_INSERT_ID() |
+------------------+
|                4 |
+------------------+
1 row in set (0.00 sec)

LAST_INSERT_ID() メソッドが最後のレコードではなく、最初のレコードの生成された値を返す出力を見ることができます。 1つの行に対して単一の INSERT ステートメントを使用する場合、LAST_INSERT_ID() を使用して最後に挿入された ID のみを取得します。

複数の行に対して単一の INSERT ステートメントを使用する場合、LAST_INSERT_ID() 関数は、最初に挿入されたレコードに対してのみ生成された値を出力します (上記の出力を参照)。 生成された ID は、サーバーで 接続ごと に維持されることに注意してください。

そのクライアントによって AUTO INCREMENT フィールドに影響を与える最新のステートメントに対して生成された最初の AUTO INCREMENT 値は、LAST INSERT ID() メソッドによってそのクライアントに返されます。 したがって、LAST_INSERT_ID() の戻り値はユーザーごとであり、サーバー上で実行された他のユーザーの他のステートメントの影響を受けません。

MAX() 関数を使用して、MySQL で最後に挿入された行の ID を取得する

MAX() 関数を使用して、行の最後に挿入された ID を取得できます。 このメソッドの 1つまたは複数の行に対して単一の INSERT ステートメントを使用するかどうかは問題ではありません。

まず、MAX() 関数を使用して、1つの行の単一の INSERT ステートメントを使用して tb_courses テーブルにデータを入力します。

クエリの例:

INSERT INTO tb_courses (COURSE_NAME) VALUES ('Data Science');
SELECT MAX( ID ) FROM tb_courses;

出力:

+-----------+
| MAX( ID ) |
+-----------+
|         7 |
+-----------+
1 row in set (0.02 sec)

7 が返されましたが、これは正しいものです。 複数の行に対して単一の INSERT ステートメントを使用し、次に MAX() 関数を使用して最後に挿入された ID を取得します。

クエリの例:

INSERT INTO tb_courses (COURSE_NAME)
VALUES
('Introduction to Recommender Systems'),
('Data Structures'),
('Analysis of Algorithms');

SELECT MAX( ID ) FROM tb_courses;

出力:

+-----------+
| MAX( ID ) |
+-----------+
|        10 |
+-----------+
1 row in set (0.00 sec)

10 という正しい値が返されます。

ORDER BY DESC を使用して、MySQL で最後に挿入された行の ID を取得する

ORDER BY DESC 句は、ID フィールドを使用して降順でデータを並べ替え、最初の行 (並べ替え前の最後の行) から ID を取得するためにも使用できます。

クエリの例:

SELECT ID FROM tb_courses ORDER BY ID DESC LIMIT 1;

出力:

+----+
| ID |
+----+
| 10 |
+----+
1 row in set (0.05 sec)
著者: Mehvish Ashiq
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

関連記事 - MySQL Table