8

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

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

ありがとう!

4

4 に答える 4

12

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

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

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

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

于 2008-10-03T00:42:32.550 に答える
6

MySQL のLAST_INSERT_ID()

于 2008-10-03T00:11:59.627 に答える
0

MySQL ドキュメントでは、関数について説明しています: LAST_INSERT_ID()

于 2008-10-03T00:15:13.927 に答える
-1

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

于 2008-10-03T00:17:57.490 に答える