「アプリケーション開発におけるロックの重要性とORMにおけるロックの実現例」からの転載です。アプリケーション開発においてデータを扱う時にロックを行うことはデータ保全性の観点から重要です。トランザクションとの関連性を紹介します。使ったロックの実現方法をアプリケーションフレームワークごとに紹介する予定です。特性まとめロックとはまず、ロックとはデータに対して読み書きの処理を同時に行うことを排除する仕組みです。ロックを行わない場合、同じデータに対して複数の処理を実行すると、結果に整合性が取れなくなったりします。商品カテゴリごとの売上の合計を計算する処理が実行されている間に、商品カテゴリが変更されると、商品カテゴリごとの売上の合計は総売り上げと違う値となってしまいます。そこでロックを用いることで、一方の処理が完了するまでもう一方の処理の読み書きを禁止させることができ、結果の整合性を取ることが出来ます。ロックを掘り下げるシステムの「どのレベル」でロックを行うかにより、考慮すべきポイントやロックできるデータの単位が異なります。レベル毎に掘り下げていきます。等幾つか種類がありますが、ほぼ例外なくロック機能を有しています。おけるテーブルに対する操作を排除するロック、レコードに対する操作を排除するロック等、「どのデータ単位」に対してロックを行うかを決めることも出来ます。一方で、アプリケーション内で行われる複数の処理において、それぞれ共通のルールを持たせることでロックを実現することが出来ます。変数を用意し次のルールを設けることでロックが行えます。対する一連の操作を一つの処理単位として扱う機能です。処理の途中で失敗した場合は、操作を開始した時の状態にロールバックされます。処理の完了はコミットと呼ばれます。並列でトランザクションが実行される場合に、操作の一貫性を保てるようにするためにはロックが必要となります。毎に分離レベルがいくつか用意されています。分離レベルは次の種類があります。READSERIALIZABLEそれぞれ簡単に説明します。設定すると、トランザクション中に変更された非コミットな値の読み込みが可能です。トランザクションを2つ実行した際に、一方で値の変更を行ったもののロールバックされた場合、もう一方で変更後の値が読み込まれると結果の整合性がとれない状態となる可能性があります。設定すると、コミットされた値が読み込まれるようになります。トランザクションを2つ実行した際に、一方で値の変更が行われ、もう一方で同じ値を参照していたとした場合、値を変更するトランザクションが完了次第、もう一方のトランザクションからは変更後の値が参照されることになります。そのため、値の参照を行う側のトランザクションを考えると、トランザクションの途中から同じ値の呼び出しを行った結果が異なることとなります。設定すると、トランザクション中に何度値を読み込んでも結果が変わらないことが保証されます。設定すると、トランザクションは並列に行われず順次実行されるようになります。トランザクションシステムの信頼性を高める特性トランザクションを行うことができるシステムにおいて、その信頼性を高めるために実現するとよいとされる特性があります。