失われた更新(Lost Update) MySQLの場合

前回のブログでは、失われた更新(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」が用意される予定だそうです。