4

mysql_insert_id()競争状態での信頼性は?複数のユーザーが同時にデータを挿入している場合、この関数は真の ID を返しますか、それとも他のユーザーの挿入されたデータ ID を返しますか?

テーブル エンジンは MyISAM です。

4

2 に答える 2

4

mysql_insert_id完全にマルチユーザーセーフです。データベース接続に完全に依存しており、接続ごとに1人のユーザーしか持てません....だから、あなたの質問によると、それは真のIDを返します....

MySqlのドキュメントから、

生成された ID は、接続ごとにサーバーに保持されます。これは、関数によって特定のクライアントに返される値が、そのクライアントによって AUTO_INCREMENT 列に影響を与える最新のステートメントに対して生成された最初の AUTO_INCREMENT 値であることを意味します。この値は、他のクライアントが独自の AUTO_INCREMENT 値を生成したとしても、影響を受けることはありません。この動作により、各クライアントは、他のクライアントのアクティビティを気にせず、ロックやトランザクションを必要とせずに、独自の ID を取得できます。

于 2012-08-12T08:45:07.400 に答える
0

複数のユーザーが挿入している場合でも、プログラムの実行では順次実行されます。

php.netから

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

また

この拡張機能の使用はお勧めできません。代わりに、MySQLi または PDO_MySQL 拡張機能を使用する必要があります。詳細については、MySQL: API ガイドの選択および関連する FAQ も参照してください。この機能の代替手段は次のとおりです。

mysqli_insert_id()
PDO::lastInsertId()

dev.mysql からこのリンクを確認することもできます。

「mysql_insert_id() の値は、現在のクライアント接続内で発行されたステートメントによってのみ影響を受けます。他のクライアントによって発行されたステートメントによっては影響を受けません。」

于 2012-08-12T08:50:33.187 に答える