SQLServer2005でのレコードロックについていろいろ見たところ
Microsoftのサイトに記事を発見。
集中連載:SQL Server 2005 と Oracle 10g の真実

この記事の第3回にロックについて書かれている。

いろいろ小難しいことが書かれているが、
SQLServer2005ではANSI標準の4 種類のトランザクション分離レベルをすべて利用することできる。
じゃ、この4種類ってのは↓

  • READ UNCOMMITTED
    最も低い分離レベル。他のトランザクションによって変更中のデータを読み取ることができます。COMMIT されていないデータを読み取る (ダーティ リードと呼ばれています) ため、読み取り中に、他のプロセスから変更中のトランザクションはロールバックされる可能性があり、一貫性のないデータ読み取りが発生してしまいます。
  • READ COMMITTED
    2 番目に低い分離レベル。COMMIT 済みのデータだけを読み取ることができます。SQL Server および Oracle においては既定の分離レベルです。ただし、SQL Server と Oracle では、実装の形態が異なります。
  • REPEATABLE READ
    2 番目に高い分離レベル。トランザクション内で参照したデータは、トランザクションが終了するまで、他のトランザクションからは変更できません。反復不可能な読み取りは発生しませんが、ファントム* は発生する可能性があります。
    * ファントム (幻) とは、データ参照時に使用した検索条件に合致するデータを他のトランザクションから新規追加することにより、同じ検索条件を使用して検索したときに、前回表示されていない新しいデータが表示されてしまうことです。
  • SERIALIZABLE
    最も高い分離レベルです。REPETABLE READ と同様に、トランザクション内で参照したデータを他のトランザクションが変更することはできません。また、参照に使用した条件に該当するデータを新規追加することもできません。従って、ファントムも発生しません。

んで、ColdFusionの「cftransaction」タグは、「isolation」属性でこの4種サポートしてるんで使えばOKなのかね。

カテゴリー: SQLServer