0

コード内で mysql_insert_id を使用して、自動インクリメントを取得しています。

いろいろ読んだところ、異なるユーザー接続ではこれに関して競合状態はないように見えますが、同じユーザーはどうですか? 同じユーザー名/ユーザーを使用してデータベースに接続しているが、異なる接続セッションから接続している場合、競合状態の問題が発生する可能性はありますか?

私のアプリケーションは PHP です。ユーザーが Web リクエストを送信すると、PHP がコードを実行し、その特定のリクエスト/接続セッションに対して、そのリクエストの間、MySQL への永続的な SQL 接続を開いたままにします。これにより、競合状態の問題が発生しますか?

4

2 に答える 2

0

実用的な目的はありません。挿入を実行した直後に last_id リクエストを実行すると、別の挿入がそれを台無しにするのに十分な時間がありません。理論的には可能かもしれません

PHPマニュアルによると

ノート:

mysql_insert_id() は最後に実行されたクエリに作用するため、値を生成するクエリの直後に必ず mysql_insert_id() を呼び出してください。

再確認したい場合に備えて、この機能を使用して以前のクエリを確認できます

mysql_info

于 2013-01-07T16:15:38.373 に答える
0

永続的な接続を使用しても、すべてのリクエストが同じ接続を使用するわけではありません。これは、各 apache スレッドが、そのスレッドで実行されるすべてのリクエスト間で共有される独自の接続を持つことを意味します。

要求は連続して (次々に) 実行されます。つまり、同時に実行されている 2 つのスレッドが同じ永続的な接続を使用することはありません。

このため、値は安全ですが、最後に実行された INSERT でなくても、最後に成功した INSERT の last_insert_idlast_insert_id返されるため、使用する前に必ず挿入の結果を確認してください。

于 2013-01-07T16:20:44.363 に答える