Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 26.8Mb
PDF (A4) - 26.9Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


MySQL 5.6 リファレンスマニュアル  /  ...  /  最後に挿入された行の一意の ID を取得する方法

23.8.15.3 最後に挿入された行の一意の ID を取得する方法

AUTO_INCREMENT カラムを含むテーブルにレコードを挿入する場合、mysql_insert_id() 関数を呼び出すことによって、そのカラム内に格納された値を取得できます。

C アプリケーションから、次のコード (ステートメントが成功したことをチェックしているものとみなす) を実行することによって、値が AUTO_INCREMENT カラム内に格納されたかどうかをチェックできます。それは、クエリーが AUTO_INCREMENT インデックスによる INSERT であったかどうかを判断します。

if ((result = mysql_store_result(&mysql)) == 0 &&
    mysql_field_count(&mysql) == 0 &&
    mysql_insert_id(&mysql) != 0)
{
    used_id = mysql_insert_id(&mysql);
}

新しい AUTO_INCREMENT 値が生成されたら、mysql_query() で、SELECT LAST_INSERT_ID() ステートメントを実行し、ステートメントによって返された結果セットから値を取得することによって、それを取得することもできます。

複数の値を挿入すると、自動的に増分された最後の値が返されます。

LAST_INSERT_ID() では、最近生成された ID が接続ごとにサーバーに維持されます。それはほかのクライアントによって変更されません。別の AUTO_INCREMENT カラムを非マジック値 (つまり、NULL でなく、0 でない値) で更新した場合でも、それは変更されません。LAST_INSERT_ID() カラムと AUTO_INCREMENT カラムを複数のクライアントから同時に使うことは完全に有効です。各クライアントは、そのクライアントが実行した最後のステートメントの最後に挿入された ID を受け取ります。

1 つのテーブルに生成された ID を使用して、それを 2 番目のテーブルに挿入する場合、このような SQL ステートメントを使うことができます。

INSERT INTO foo (auto,text)
    VALUES(NULL,'text');         # generate ID by inserting NULL
INSERT INTO foo2 (id,text)
    VALUES(LAST_INSERT_ID(),'text');  # use ID in second table

mysql_insert_id()AUTO_INCREMENT カラムに格納された値が、NULL または 0 を格納することによって自動的に生成されているか、または明示的な値として指定されたかどうかに関係なく、その値を返します。LAST_INSERT_ID() は自動的に生成された AUTO_INCREMENT 値のみを返します。NULL または 0 以外の明示的な値を格納する場合、それは、LAST_INSERT_ID() によって返される値に影響を与えません。

AUTO_INCREMENT カラム内の最後の ID を取得する詳細については: