11/01/29 14:10:00
railsの設定ではなくて、MySQLのトランザクションレベルによる。
URLリンク(dev.mysql.com)
InnoDB使ってるだろうから、デフォルトの REPEATABLE READ だと思われる。
結論からいうと、Bookテーブルは別のプロセスから変更を受けうる。
ただし、Bookテーブル内のロックされた行は
別プロセスから変更を受けないことが保証される。
テーブルレベルのロックと行レベルのロックの違いを汁。
Aさんが行1,2を更新している間は、Bさんは行1,2のコミットが終わるまでは、
UPDATEやDELETEはもちろん、SELECT文での読み取りも不可能になる。
ただし、Aさんがそのトランザクション中に更新しないとMySQLが判断した
行3なんかがあたとしたら、Bさんは行3に関しては読み取り・更新が出来る。
書き方が変だと、トランザクションはったつもりでも
レースコンディションが起こるので注意。
URLリンク(d.hatena.ne.jp)