SAP SQL Anywhere における UPDATE文と下位独立性レベル
この記事のオリジナルは、Glenn Paulley が sybase.com に2011年7月に掲載したものです。Glenn はこの中で、異なる独立性レベルを使用する場合とデータベースのデータをアップデートする場合のトレードオフについて語っています。
===
ISO/ANSI SQL 独立性レベル 3(SERIALIZABLE)で実行されるアプリケーションはほとんどありません。実際のところ、SQL Anywhere のデフォルトの独立性レベルは0(READ UNCOMMITTED)で、JDBC アプリケーションに限り、デフォルトは READ COMMITTED となっています。
SQL Anywhere の READ UNCOMMITTED 独立性レベルでは、操作中にスキーマロックとローの書き込みロックのみがトランザクションによって取得され、ローの読み込みロックはまったく取得されません。
したがって、READ UNCOMMITTED では、書き込みトランザクションは読み込みトランザクションをブロックしません。
しかしその一方、SQL Anywhere は READ UNCOMMITTED 独立性レベルでのセマンティクスを保証していません。俗な言葉で言うなれば、支払っただけのものしか手に入らない、ということです。
多くのアプリケーションでは、コミットされていないローの危険性や影響は限られているため、時として、READ UNCOMMITTED の本当の意味が正しく理解されていない場合があります。
本稿では、その影響がよりはっきりとする例を示してみたいと思います。
===
(続きは、2011年に翔泳社 CodeZine に掲載された翻訳記事をご覧ください。)
SAPのSAP SQL Anywhere製品ページはこちら