MySQL 5.1 リファレンスマニュアル :: 23 APIとライブラリー :: 23.2 MySQL C API :: 23.2.14 C APIを使うときよく尋ねられる質問と問題 :: 23.2.14.3 最後に挿入された列に対するユニークIDを取得する方法
« 23.2.14.2 クエリーからどんな結果を得ることができるか

23.2.14.4 C APIにリンクする問題 »
Section Navigation      [Toggle]
  • 23.2.14 C APIを使うときよく尋ねられる質問と問題
  • 23.2.14.1 なぜmysql_store_result()時々返すNULL の後mysql_query() 成功を返す
  • 23.2.14.2 クエリーからどんな結果を得ることができるか
  • 23.2.14.3 最後に挿入された列に対するユニークIDを取得する方法
  • 23.2.14.4 C APIにリンクする問題

23.2.14.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カラムを複数のクライアントから同時に使うことは完全に有効です。各クライアントは、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. 「オートインクリメント値の獲得」をご参照ください。

Copyright © 1997, 2010, Oracle and/or its affiliates. All rights reserved. Legal Notices
Top / Previous / Next / Up / Table of Contents
© 2010, Oracle Corporation and/or its affiliates