Skip to content

Instantly share code, notes, and snippets.

@minazou67
Last active March 13, 2018 06:23
Show Gist options
  • Save minazou67/d6e684ab30dad76c9d2c7b40541674c5 to your computer and use it in GitHub Desktop.
Save minazou67/d6e684ab30dad76c9d2c7b40541674c5 to your computer and use it in GitHub Desktop.
Transaction isolation note

Transaction isolation note

トランザクション分離レベルのメモです。

Isolation level

ANSI/ISO SQL 標準によって、4種類の分離レベルが定められています。

ANSI/ISO Level for SQL Dirty Read Non-Repeatable Read (Fuzzy Read) Phantom Read
READ UNCOMMITTED UR
READ COMMITTED CS -
REPEATABLE READ RS - -
SERIALIZABLE RR - - -
  • 分離レベルが高くなるほどデータの一貫性は高くなります。
  • 分離レベルが高くなるほどロック制御が厳しくなり待ち時間が長くなります。
  • データベース毎にサポートしている分離レベルは異なります。
  • データベースによっては、標準と異なる動作をするものがあります。

Problems with transaction processing

Problem Overview
Dirty Read T1の未コミットの更新内容が、T2から見えてしまう。
Non-Repeatable Read
(Fuzzy Read)
T1から複数回問い合わせした際に、T2のコミット前後で取得レコードの内容が異なってしまう。
T2のUpdate、Deleteの内容が反映される。
Phantom Read T1から複数回問い合わせした際に、T2のコミット前後で取得レコードが異なってしまう。
T2のInsertの内容が反映される。

Default isolation level of each database

Database Default isolation level
Oracle DB READ COMMITTED
Microsoft SQL Server READ COMMITTED
IBM DB2 READ COMMITTED
PostgreSQL READ COMMITTED
MySQL(InnoDB) REPEATABLE READ
Derby READ COMMITTED
H2 READ COMMITTED

Default isolation level of each database of WAS data source

Database (JDBC driver) Default isolation level
Oracle DB READ COMMITTED
Microsoft SQL Server REPEATABLE READ
IBM DB2 REPEATABLE READ
Derby REPEATABLE READ
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment