質問

mysqlでは、自動インクリメントの場合、挿入操作に使用される主キーを取得するにはどうすればよいですか。

基本的に、ステートメントの完了時に新しい自動インクリメント値が返されるようにします。

ありがとう!

役に立ちましたか?

解決

説明コメントでは、別の同時INSERTが発生した場合にLAST_INSERT_ID()が間違った結果を出さないようにすることに関心があると述べています。他の同時アクティビティに関係なく、LAST_INSERT_ID()を使用しても安全です。 LAST_INSERT_ID()は、現在のセッション中に生成された最新のIDのみを返します。

自分で試すことができます:

  1. 2つのシェルウィンドウを開き、mysqlを実行します それぞれのクライアントとに接続します データベース。
  2. シェル1:テーブルへのINSERT AUTO_INCREMENTキー。
  3. シェル1:SELECT LAST_INSERT_ID()、 結果を参照してください。
  4. シェル2:同じテーブルに挿入します。
  5. シェル2:SELECT LAST_INSERT_ID()、 シェル1とは異なる結果を参照してください。
  6. シェル1:SELECT LAST_INSERT_ID() 繰り返しますが、以前の繰り返しを参照してください 結果。

考えてみれば、これが意味のある唯一の方法です。自動インクリメントキーメカニズムをサポートするすべてのデータベースは、この方法で動作する必要があります。結果が他のクライアントとの競合状態に依存していて、おそらく同時に挿入されている場合、現在のセッションで最後に挿入されたID値を取得する信頼できる方法はありません。

他のヒント

MySQL Docsは関数について説明しています: LAST_INSERT_ID()

[table_nameからmax(primary_key_column_name)を選択] ああ、そうではない。私はMySQLの男ではありませんが、最後に完了したアクションに最後に挿入されたIDを取得する特定の方法があり、これはこれよりも少し堅牢です。テーブルへの書き込みとクエリの間に挿入が発生した場合はどうなりますか?私が知っているのは、それが何ヶ月も前に私を刺したからです(そうです)。 他のすべてが失敗した場合は、マニュアルをお読みください: http:// dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top