RSS DEV コミュニティ

SQLにおけるSELECT FOR UPDATEのメカニズム

SELECT FOR UPDATEは、トランザクション内で取得された行をロックし、他のトランザクションがこれらの行を変更またはロックを取得するのを防ぐための行レベルのロッキングメカニズムです。データの整合性を維持するために使用されるシナリオで一般的に使用されます。MySQLでは、SELECT FOR UPDATEの実装は、InnoDBなどのストレージエンジンに密接に関連しており、ターゲット行をロックするために行ロックを使用します。このロッキングメカニズムは、クエリーによって取得された行に排他的ロックを設定し、他のトランザクションがこれらの行を変更または共有ロックや排他的ロックを設定するのを防ぎます。SELECT FOR UPDATEは、トランザクション内で使用する必要があり、トランザクションをサポートするストレージエンジンでのみ有効です。如果他のトランザクションによってターゲット行が既にロックされている場合、現在のトランザクションは、ロックが解除されるかタイムアウトが発生するまで待機状態に入ります。InnoDBストレージエンジンは、インデックスを通じて行レベルのロッキングを実装し、SELECT FOR UPDATEは、クエリー条件に一致するすべての行をロックします。ロッキングプロセスでは、スキャンされた各行に排他的ロックを設定し、他のトランザクションによって既にロックされている行がある場合、現在のトランザクションは、そのロックが解除されるまで待機します。SELECT FOR UPDATEの最適化には、インデックスの使用が非常に重要であり、インデックスを使用するクエリーは、行レベルのロックを適用し、テーブルレベルのロックの劣化を回避します。
favicon
dev.to
The Mechanics of SELECT FOR UPDATE in SQL
記事の画像: SQLにおけるSELECT FOR UPDATEのメカニズム
Create attached notes ...