通常の処理中は、RDBMSはビュー構造をロックします。暗黙のロックが自動的に実行されて、他のユーザからのアクセスからデータを保護します。
デフォルトのロックを変更する機能は、明示的ロックとして知られています。SQLステートメントが実行されると、暗黙のロックが自動的に発生します。たとえば、INSERT、UPDATE、DELETEの各ステートメントは、トランザクション中データの一貫性と完全性を維持するように、暗黙のロックを発行します。
いくつかのRDBMS(例えばOracle)は、レコードレベルでロックされます。RDBMSによってはページレベルのロックのみを行います。この場合、同じページ内の他のレコードがロックの原因になります。
SQLのロックには、主に2つのレベルがあります。
排他的ロック …… UPDATE文が発行されると、自動的に生成されます。
共有ロック …… SELECT文によって発行されるか、またはSELECT文の終わりにFOR UPDATE句を追加することによって発行されます。共有ロックは、予定されているレコードの更新を、このロックが解放されてから実行するようにSQLサーバに指示します。レコードを更新しようとしたり、SELECT ... FOR UPDATE文を送信しようとしたりするユーザには、レコードがほかのユーザによってロックされているというエラーメッセージが表示されます。
関連トピック: