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

MySQLのLAST_INSERT_ID()関数とは?使い方と具体例をわかりやすく解説

MySQLのLAST_INSERT_ID()関数は、AUTO_INCREMENT属性が設定されたカラムにおいて、直近で自動生成された連番(シーケンス番号)を取得するための関数です。データを挿入した後に、その行に割り当てられたIDをすぐに知りたい場合に非常に便利です。

LAST_INSERT_ID()の主な特徴

  • AUTO_INCREMENTによって最後に生成された値を返します。
  • 戻り値は接続(コネクション)ごとに管理されるため、他のクライアントのINSERT操作の影響を受けません。
  • 1回のINSERT文で複数行を挿入した場合は、最初の行に割り当てられたIDが返されます。

使用例

ここでは、AUTO_INCREMENTカラムを持つ「Student」テーブルを作成し、「Name」カラムに2件の値を挿入します。その後、LAST_INSERT_ID()関数を実行すると、直近で生成されたシーケンス番号である「2」が返されます。

mysql> Create table Student(Id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, Name Varchar(5));
Query OK, 0 rows affected (0.13 sec)

mysql> Insert into student(Name) Values('Raman');
Query OK, 1 row affected (0.06 sec)

mysql> Insert into student(Name) Values('Rahul');
Query OK, 1 row affected (0.07 sec)

mysql> Select* from student;
+----+-------+
| Id | Name |
+----+-------+
| 1 | Raman |
| 2 | Rahul |
+----+-------+
2 rows in set (0.00 sec)

mysql> Select Last_insert_id();
+------------------+
| Last_insert_id() |
+------------------+
|                2 |
+------------------+
1 row in set (0.00 sec)

実行結果のポイント

上記の例では、テーブル作成後に「Raman」「Rahul」という2件のレコードを挿入しています。AUTO_INCREMENTにより、1件目にはId=1、2件目にはId=2が自動的に割り当てられました。この状態でLAST_INSERT_ID()を実行すると、最後に挿入された行のIDである「2」が返されることが確認できます。

活用のヒント

LAST_INSERT_ID()は、親テーブルへの挿入後に生成されたIDを使って、子テーブルに関連レコードを登録するといった場面でよく利用されます。PHPやPythonなどのアプリケーションからも簡単に呼び出せるため、リレーショナルなデータ操作において欠かせない関数といえます。

  1. MySQLのINSERT IGNOREステートメントとは?重複データの挿入を防ぐ方法

    INSERT IGNOREステートメントは、MySQLのテーブルに重複したデータが挿入されるのを防ぐために使用されます。通常のINSERT文の代わりにINSERT IGNOREコマンドを使うと、新規レコードが既存レコードと重複していなければ通常どおり挿入されますが、重複している場合はIGNOREキーワードによってMySQLがそのレコードを黙って破棄し、エラーを発生させません。 基本構文 INSERT IGNORE INTO table_name(...) ここで、table_nameは値を挿入したいテーブルの名前です。カラム名とVALUES句の指定方法は通常のINSERT文と同じです。 動作の

  2. MySQLでCHAR()関数の逆の処理を行う方法|ASCII()とORD()の違いを解説

    MySQLにおいて、CHAR()関数の逆の働きをするのは ASCII() 関数と ORD() 関数です。CHAR() は数値(文字コード)を文字に変換する関数ですが、ASCII() は引数の文字列の左端の文字に対応する数値(ASCIIコード)を返し、ORD() は左端の文字の文字コードを返します。 ASCII()とORD()の違い どちらも文字から数値への変換を行う点は共通していますが、以下のような違いがあります。 ASCII():シングルバイト文字専用。マルチバイト文字を渡すと警告が出て64を返します。 ORD():マルチバイト文字にも対応しており、最初のバイトの値に基づいて計算された文字