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
カラムを複数のクライアントから同時に使うことは完全に有効です。各クライアントは、thatクライアントが実行した最後のステートメントに対する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
その値がNULL
または0
を記憶することによって、自動的に生成された値または明確な値として規定された値であっても、mysql_insert_id()
がAUTO_INCREMENT
カラムの中に記憶された値を戻すことにご注目ください。LAST_INSERT_ID()
は自動的に生成されたAUTO_INCREMENT
値だけを戻します。NULL
または0
ではなく、明示された値を記憶させる場合、それは、LAST_INSERT_ID()
によって戻された値に影響を与えません。
AUTO_INCREMENT
カラム中に最後のIDの取得する方法に関する明細情報:
SQLステートメントの中で使われるLAST_INSERT_ID()
関する情報については、???をご参照ください。
mysql_insert_id()
に関する情報、C
APIの中から使用する機能については、項23.2.3.37. 「mysql_insert_id()
」をこ参照ください。
Connector/Jを使用するとき、自動的に増加した値を取得する方法に関する情報については、項24.4.5. 「Connector/J に関する注記とヒント」をご参照ください。
Connector/ODBCを使用するとき、自動的に増加した値を取得する方法に関する情報については、項24.1.6.1.1. 「オートインクリメント値の獲得」をご参照ください。