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


23.8.7.37 mysql_insert_id()

my_ulonglong mysql_insert_id(MYSQL *mysql)

説明

前の INSERT または UPDATE ステートメントによって、AUTO_INCREMENT カラムに生成された値を返します。この関数は、AUTO_INCREMENT フィールドを含むテーブルへの INSERT ステートメントを実行したか、INSERT または UPDATE を使用して、LAST_INSERT_ID(expr) によってカラム値を設定した後に使用します。

mysql_insert_id() の戻り値は、次のいずれかの条件で、明示的に更新されないかぎり、常にゼロです。

  • 値を AUTO_INCREMENT カラムに格納する INSERT ステートメント。これは値が、特殊な値 NULL0 をカラムに格納することによって自動的に生成されるか、明示的な特殊でない値であるかに関係なく当てはまります。

  • 複数行の INSERT ステートメントの場合、mysql_insert_id() は、最初に正常に挿入された、自動生成された AUTO_INCREMENT 値を返します。

    正常に挿入された行がない場合、mysql_insert_id() は 0 を返します。

  • INSERT ... SELECT ステートメントが実行され、正常に挿入された自動生成された値がない場合、mysql_insert_id() は最後に挿入された行の ID を返します。

  • INSERT ... SELECT ステートメントで LAST_INSERT_ID(expr) を使用した場合、mysql_insert_id()expr を返します。

  • LAST_INSERT_ID(expr) を任意のカラムに挿入するか、または任意のカラムを LAST_INSERT_ID(expr) に更新することによって、AUTO_INCREMENT 値を生成するステートメントを INSERT します。

  • 前のステートメントがエラーを返した場合、mysql_insert_id() の値は未定義になります。

mysql_insert_id() の戻り値は、次のシーケンスに簡略化できます。

  1. AUTO_INCREMENT カラムがあり、自動的に生成された値が正常に挿入された場合、それらの最初の値を返します。

  2. ステートメントで LAST_INSERT_ID(expr) が行われた場合、影響を受けるテーブルに AUTO_INCREMENT カラムがあった場合でも、expr を返します。

  3. 戻り値は使用されたステートメントによって変わります。INSERT ステートメントのあとに呼び出された場合:

    • テーブルに AUTO_INCREMENT カラムがあり、テーブルに正常に挿入されたこのカラムのいくつかの明示的な値があった場合、最後の明示的な値を返します。

    INSERT ... ON DUPLICATE KEY UPDATE ステートメントのあとに呼び出された場合:

    • テーブルに AUTO_INCREMENT カラムがあり、テーブルにいくつかの明示的な正常に挿入された値またはいくつかの更新された値があった場合、最後に挿入されたか、または更新された値を返します。

前のステートメントが AUTO_INCREMENT 値を使用していない場合、mysql_insert_id()0 を返します。値をあとのために保存する必要がある場合、値を生成するステートメントの直後に mysql_insert_id() を呼び出してください。

mysql_insert_id() の値は、現在のクライアント接続内で発行されたステートメントによってのみ影響を受けます。それは、ほかのクライアントによって発行されたステートメントに影響を受けません。

LAST_INSERT_ID() SQL 関数は、正常に挿入された、最初に自動生成された値を格納します。LAST_INSERT_ID() の値はサーバーで保持されるため、この関数はステートメント間でリセットされません。mysql_insert_id() とのもう 1 つの違いは、AUTO_INCREMENT カラムを特定の特殊でない値に設定した場合に、LAST_INSERT_ID() が更新されないことです。セクション12.14「情報関数」を参照してください。

mysql_insert_id() は、AUTO_INCREMENT 値を生成するストアドプロシージャーの CALL ステートメントのあとに、0 を返します。この場合、mysql_insert_id()CALL に適用され、プロシージャー内のステートメントには適用されないためです。プロシージャー内で、LAST_INSERT_ID() を SQL レベルで使用して、AUTO_INCREMENT 値を取得できます。

LAST_INSERT_ID()mysql_insert_id() の違いの理由は、LAST_INSERT_ID() がスクリプトで使いやすく、mysql_insert_id()AUTO_INCREMENT カラムに起こったことに関してより正確な情報を提供しようとすることです。

戻り値

先述の説明で示しています。

エラー

なし。


User Comments
Sign Up Login You must be logged in to post a comment.