0

最近、SQL Server から MySQL に切り替えましたが、この質問に対する確かな答えがどこにも見つかりません。

ロックする必要があるテーブルでは、PHP、MySQL、および InnoDB テーブル エンジンを使用しています。したがって、標準的な一連の 3 つのステートメントの場合:

  1. テーブル A に挿入
  2. $id = $mdb2->lastInsertID()
  3. テーブル B に挿入 (name, fk) VALUES ('foo', $id)

$id に手順 1 の挿入の値があることを確認するには、どのような手順を実行する必要がありますか? このままでいいの?すべてをトランザクションにする必要がありますか? テーブルをロックおよび解放するには、他のクエリを追加する必要がありますか?

みんなありがとう。

4

2 に答える 2

4

すべき/できますが、何もする必要はありません: information-functions 、 function_last-insert-id

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

于 2012-01-14T18:08:53.463 に答える