前回のブログでは、失われた更新(Lost
Update)がどこでどのように定義されたものかをみました。
そもそも、Lost Updateを取り上げた理由は、FirebirdではLost
Updateが起こる場合、後から更新しようとしたトランザクションがエラーになる仕様なのです。
では、MySQLの場合はどうでしょうか?MySQLでトランザクションを使う場合は、現在ほとんどの場合InnoDBを使いますが、InnoDBを使った場合にはLost
Updateは起こります。
ただ、MySQLのバージョン6.0.xに含まれるFalconデータベースエンジンでは、Firebirdと同様に、ロストアップデートを自動的に検知します。
詳細な比較は松信さんが寄稿した以下のページをご参照ください。
MySQLの新ストレージエンジン Falcon徹底リサーチ(5 トランザクション制御 -
MVCCと排他制御)
これは、Firebird(の元になったInterBase)と、Falconのアーキテクトが同一人物(Jim
Starkey)であるためだと思います。
ただ、この仕様だとInnoDB->Falconに移行する場合に、元々大丈夫だった処理(Lost
Update含んでいる)がエラーになってしまいますので、今後「InnoDB Compatibility Mode」が用意される予定だそうです。
Jan
20
2009