MySQL で最後に挿入されたレコードの ID を取得する
-
MySQL テーブルに最後に挿入されたレコードの
ID
を取得する -
LAST_INSERT_ID()
関数を使用して、MySQL で最後に挿入された行のID
を取得する -
MAX()
関数を使用して、MySQL で最後に挿入された行のID
を取得する -
ORDER BY DESC
を使用して、MySQL で最後に挿入された行のID
を取得する
このチュートリアルでは、LAST_INSERT_ID()
、MAX()
、および ORDER BY DESC
という名前の 3つのアプローチをコード例で説明し、MySQL で最後に挿入されたレコードの ID
を取得する方法を示します。
MySQL テーブルに最後に挿入されたレコードの ID
を取得する
MySQL テーブルに最後に挿入されたレコードの ID
を取得するために使用できる 3つの方法があります。 これらはすべて以下にリストされており、次のアプローチのいずれかを使用するには、テーブルに AUTO_INCREMENT
フィールドが必要です。
LAST_INSERT_ID()
関数を使用します。max()
関数を使用します。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)