2012-02-02 21 views
3

私は複数のユーザーが同時に使用できるWebアプリケーションを構築しています。彼らは同時にデータを追加することができます。mysqlで最後に挿入されたレコードのIDを正確に取得する方法は?

私は

Screenshot of DB http://img687.imageshack.us/img687/7033/testxqz.png

を次のように医者についてのレコードが追加されるとdoctor_mainという名前のテーブルを持って、私は(自動インクリメントフィールドで)挿入されたレコードのIDを返すことにしたいです。

私はLAST_INSERT_ID()やmysql_insert_idのようなメソッドを使うことができます。しかし、私はそれがどのように動作するのかわかりません。

その特定のユーザーによって挿入されたレコードの正確なIDが必要です。

2人のユーザーがレコードを挿入しようとすると、返されるIDが交換されないことがあります。

これを達成するには、どのような種類のmysql関数を使用しますか?

+1

これは信頼できるものではありません。それはあなたのものよりも優れた心です。返されるIDは、他のユーザーのスレッドではなく、そのユーザーのスレッドによる最後の挿入のIDです。 –

+1

LAST_INSERT_ID()は、AUTO_INCREMENT列によって自動生成されたIDに対して、MySQL接続ごとに基づいています。つまり、同じ接続でLAST_INSERT_ID()を呼び出す限り、INSERTを実行した後に並行性の問題は発生しません。 – nos

+0

@MarkBaker Yeap、私は何年も前からこの仕事をしていたよりも、より良い考えをしてくれることを願っています。ただ疑念を持って丁寧に犯されることはない。:) –

答えて

8

ページ全体がこのテーマへの手動専用にあります:LAST_INSERT_IDについて

:ここ

は、あなたの質問に答える必要があり、そのページからの引用です()では、最も最近生成されたIDは、接続ごとにサーバーに保持されます。別のクライアントによって変更されることはありません。

+0

@すべて私はmysql_insert_idが私の仕事を達成するための最善の選択であることを感謝します。 –

2

docsによれば、mysql_insert_idは以前に行った挿入物の正確なIDを返します。

3

mysql_insert_id()戻り、最後の挿入されたレコードの正確ID、あなただけecho mysql_insert_id()あなたは非常に最後に挿入された行のIDを取得しますので、もし。

-1

last_insert_idのメカニズムが不審な場合は、auto_incrementの機能ではなくidを手作業で割り当てることができます。

2

LAST_INSERT_ID()およびmysql_insert_idが問題ありません。各クライアントは、クライアントが最後に実行したステートメントの最後に挿入されたIDを受け取ります。

2

LAST_INSERT_ID()は接続ごとに動作します。複数のユーザーが複数の接続を使用するため、ユーザー間でIDの交換が行われることはありません。

関連する問題