DBのトランザクション

WebアプリのテストにHsqldbを積極的に使おうと思ってトランザクションの隔離レベルが気になった。ということでメモ。

マニュアル(http://hsqldb.org/doc/guide/ch02.html#N104FC)によればHsqldbの隔離レベルはREAD_UNCOMMITTEDのみのサポートらしい。さらに、MySql(InnoDB)のREAD_UNCOMMITEDと異なり、同一行に対する更新に対して排他ロックがかからない。さらに、MySqlOracleでは検索時にFOR UPDATE句で排他ロックを積極的にかけることができるが、Hsqldbはサポートしていないみたい。

なので、Daoなどのテストで一時的にHsqldbを利用するときに注意すべきは、トランザクション隔離レベルに依存したテストは実施すべきではない、ということ。1つのトランザクションでDaoの機能をテストするだけなら問題ないが、2つ以上のトランザクションでDaoの機能をテストしちゃまずい。


参考: