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
ステートメント。これは値が、特殊な値NULL
や0
をカラムに格納することによって自動的に生成されるか、明示的な特殊でない値であるかに関係なく当てはまります。-
複数行の
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()
の戻り値は、次のシーケンスに簡略化できます。
AUTO_INCREMENT
カラムがあり、自動的に生成された値が正常に挿入された場合、それらの最初の値を返します。ステートメントで
LAST_INSERT_ID(
が行われた場合、影響を受けるテーブルにexpr
)AUTO_INCREMENT
カラムがあった場合でも、expr
を返します。-
戻り値は使用されたステートメントによって変わります。
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
カラムに起こったことに関してより正確な情報を提供しようとすることです。
戻り値
先述の説明で示しています。
エラー
なし。