トランザクションの種類 ロックの種類

トランザクションにも何種類かあることを知った。前まではロックをかけてというものだけだと思っていたのだけど他の方法もあるあらしい。ちなみにこれはロック法という。次は時刻印方式で、トランザクションの発生したタイムスタンプを記録しておいて、そのタイムスタンプの比較で読み書きの判定を行う。これはロックをかけないので、ロック待ちやデッドロックが発生しない。ロールバックしてリスタートするのでアクセス回数が増えるという欠点もある。楽観的方式というものもあり、これもロックはしない。データを読み込むだけのトランザクションが多い時に有効。書き込みのときだけチェックが入る。
結論的には、ロック法が1番無難なのかなと思う。機会があれば他の方法も使ってみたいような気もしないではない。
ロック法には、さらに2相ロック方式と木規約がある。2相ロック方式はデッドロックがあって、木規約はデッドロックが発生しない。ロックには、粒度があり、大きいほうから、データベース、表・テーブル、ページ、レコード・行がある。
一貫性の水準として、つまりデータに矛盾が生じないようにするためのものがあり。SQLとしては隔離性の水準として4つのレベルにわけられている。READ UNCOMMITTED、 READ COMMITTED、 REPEATABLE READ、 SERIALIZABLEの順にレベルが高く、矛盾が生じないようになっている。もちろんレベルが高いものを使ったほうがいいが、ロックが厳しくなったりするので、システムによってダーティリードなどが生じないようなら低いレベルを使ったほうがいい。システムにあわせたレベルを使うことが要求される。
ビューにアクセスさせることでセキュリティが向上する。
検査制約をデータベースにまかせることにより、プログラム側でのチェックがなくなり、保守性などが向上する。