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 を取得する詳細については:
SQL ステートメント内で使用できる
LAST_INSERT_ID()
に関する情報については、セクション12.14「情報関数」を参照してください。C API 内から使用する関数
mysql_insert_id()
については、セクション23.7.7.37「mysql_insert_id()」を参照してください。Connector/J を使用する場合の自動インクリメントされた値の取得については、Retrieving
AUTO_INCREMENT
Column Values through JDBCを参照してください。Connector/ODBC を使用する場合の自動インクリメントされた値の取得については、Obtaining Auto-Increment Valuesを参照してください。