2012-05-12 13 views
1

これが可能かどうかは不思議です。私は挿入し、最後の挿入IDを取得するストアドプロシージャを持っています。 2人のユーザーが同時にこの手順を使用する場合、これは可能なのでしょうか?MySQLのストアドプロシージャと最後に挿入された行

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

ストアドプロシージャを2回呼び出すと、挿入クエリのシーケンスがインターレースできますか?それとも、鉛を取るだろうか?

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

答えて

3

これは問題ではありません。 fine manual

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

だからlast_insert_id()値は常にセッションごと(AKA 接続)であり、あなたがプレイに2つのセッションを持って、お互いのlast_insert_id()値に干渉することはできません。

つまり、last_insert_id()の値を取得し、可能な限りINSERTの直後に変数に格納することをお勧めします。あなたの背中の後ろにあるINSERTを行う何か他のことをすれば、道路の2か月後にロギングが追加された別のプロシージャを呼び出し、そのロギングがINSERTを行います。の値が失われます。—

+0

男を指してくれてありがとう! – Theveloper

関連する問題