明確化のコメントは、別の同時INSERTが発生した場合に、LAST_INSERT_ID()が間違った結果を出さないようにすることに関心があることを示しています。他の同時アクティビティに関係なく、LAST_INSERT_ID()を使用しても安全ですのでご安心ください。 LAST_INSERT_ID()は、現在のセッション中に生成された最新のIDのみを返します。
自分で試すことができます:
- 2つのシェルウィンドウを開き、それぞれでmysqlclientを実行して、データベースに接続します。
- シェル1:AUTO_INCREMENTキーを使用してテーブルに挿入します。
- シェル1:SELECT LAST_INSERT_ID()、結果を参照してください。
- シェル2:同じテーブルに挿入します。
- シェル2:SELECT LAST_INSERT_ID()、シェル1とは異なる結果を参照してください。
- シェル1:もう一度、LAST_INSERT_ID()を選択します。以前の結果の繰り返しを参照してください。
あなたがそれについて考えるならば、これは理にかなっている唯一の方法です。自動インクリメントキーメカニズムをサポートするすべてのデータベースは、このように動作する必要があります。結果が他のクライアントが同時に挿入している可能性のある競合状態に依存している場合、現在のセッションで最後に挿入されたID値を取得する信頼できる方法はありません。