ユーザ用ツール

サイト用ツール


rdbms

リレーショナルデータベース

トランザクション

エラーリード

ダーティリード 未コミットデータをリードすること。ロールバックされると不正な値を読み込んだという事になる。
ファジーリード トランザクション中に同じ条件で2回リードしたときに、結果が異なる。トランザクション中に他トランザクションによってコミットされると発生する。
ファントムリード トランザクション中に同じ条件で2回リードしたときに、行が消えたり増えたりしている。トランザクション中に他トランザクションによって挿入、削除がコミットされると発生する。

トランザクション分離レベル

Read Uncommited コミットされてないデータが読める。
Read Commited コミットされてないデータは読めない。ダーティリードを抑止する。
Repeatable Read トランザクション終了まで、そのトランザクションに影響するデータを更新できない。ファジーリードまで防げる。
Serializable トランザクション終了まで、そのトランザクションに影響しうるトランザクションは実行されず、待ち状態になる。ファントムリードまで防げる。

下に行く程安全だが性能が犠牲になる。多くのDBはRead Commitedがデフォルト。MySQL(InnoDB)はRepeatable Readがデフォルト。

例えばRepeatable Readでは、あるトランザクションAで UPDATE t1 SET value = 5 WHERE number > 1 というクエリを実行したとき、他のトランザクションで number > 1 の行をUPDATEしようとするとトランザクションAがコミットされるまで待たされる。SerializableではUPDATEに加えてINSERT, DELETEも待たされる。

エンタープライズRDBMS無料版

Oracleなどの高価なDBMSにも無料版が存在する。ライセンスをよく読んで使用すること。

rdbms.txt · 最終更新: 2014/03/31 05:07 by nullpon