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)
