MyISAMにはトランザクション機能がないですが、どのように一貫性を保のでしょうか?
たとえば、AテーブルとBテーブルを更新する処理があるとします。
Aテーブルの更新に成功後、Bテーブルの更新で失敗した場合は、例外を補足してAテーブルの内容を元に戻すように更新し直すのでしょうか?
ROLLBACKするような設計はMyISAM向きではありません。
MyISAMを適用する場合は、AテーブルとBテーブルを更新するデータをあらかじめプログラム側でヴァリデーションチェックし、更新は絶対に失敗しないように設計すべきです。
この点については、MySQL公式マニュアルの下記のページで詳しく述べられています。
http://dev.mysql.com/doc/refman/5.1/ja/ansi-diff-transactions.html
不整合が起こることを前提に設計するしかありません。
>Aテーブルの更新に成功後、Bテーブルの更新で失敗した場合は、例外を補足して
>Aテーブルの内容を元に戻すように更新し直すのでしょうか?
たいていはそれでも問題がないことが多いですが、
元に戻そうとしたら、その処理がエラーになって元に戻せないとかもありえます。
一貫性を保つ機構はプログラム側でやるしかないわけですが
完璧に一貫性を保つのは無理だという前提で、
設計する必要があります。
回答ありがとうございます。
回答ありがとうございます。
2012/03/03 20:55:57