1

これが可能性であるかどうか、私は興味があります。最後の挿入 ID を挿入してから取得するストアド プロシージャがあります。2 人のユーザーが同時にこの手順を使用した場合、このようなことは可能ですか?

 User 1
             User 2
 Insert 1
             Insert 2
 GetsLastid 2
             GetsLastid 2

ストアド プロシージャの 2 つの呼び出しは、挿入クエリのシーケンスをインターレースできますか? それともどちらかがリードしますか?

ありがとうございました!

4

1 に答える 1

3

それは問題ではありません。細かいマニュアルから:

生成された ID は、接続ごとにサーバーに保持されます。これは、関数によって特定のクライアントに返される値が、そのクライアントによって列にAUTO_INCREMENT影響を与えた最新のステートメントに対して生成された最初の値であることを意味します。この値は、他のクライアントが独自の値を生成したとしても、影響を受けることはありません。AUTO_INCREMENTAUTO_INCREMENT

したがって、last_insert_id()値は常にセッションごと (AKA connection ) であり、2 つのセッションが実行されているため、互いのlast_insert_id()値に干渉することはできません。

つまりlast_insert_id()、INSERT の直後に値を取得して変数に格納することをお勧めします。背後で INSERT を実行する何か他のことを行うと (たとえば、2 か月後にログが追加され、そのログが INSERT を実行する別のプロシージャを呼び出したとします) last_insert_id()、必要な値が失われます。

于 2012-05-12T02:57:08.163 に答える