MySQLのストレージエンジン「MyISAM」について質問です。


MyISAMにはトランザクション機能がないですが、どのように一貫性を保のでしょうか?

たとえば、AテーブルとBテーブルを更新する処理があるとします。
Aテーブルの更新に成功後、Bテーブルの更新で失敗した場合は、例外を補足してAテーブルの内容を元に戻すように更新し直すのでしょうか?

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2012/03/01 22:42:37
  • 終了:2012/03/03 20:56:24

回答(2件)

id:oil999 No.1

oil999回答回数1728ベストアンサー獲得回数3202012/03/01 23:35:41

ポイント50pt

ROLLBACKするような設計はMyISAM向きではありません。

MyISAMを適用する場合は、AテーブルとBテーブルを更新するデータをあらかじめプログラム側でヴァリデーションチェックし、更新は絶対に失敗しないように設計すべきです。

この点については、MySQL公式マニュアルの下記のページで詳しく述べられています。
http://dev.mysql.com/doc/refman/5.1/ja/ansi-diff-transactions.html

id:Gaasu

回答ありがとうございます。

2012/03/03 20:55:57
id:taroe No.2

taroe回答回数1099ベストアンサー獲得回数1322012/03/02 00:27:45

ポイント50pt

不整合が起こることを前提に設計するしかありません。



>Aテーブルの更新に成功後、Bテーブルの更新で失敗した場合は、例外を補足して
>Aテーブルの内容を元に戻すように更新し直すのでしょうか?

たいていはそれでも問題がないことが多いですが、
元に戻そうとしたら、その処理がエラーになって元に戻せないとかもありえます。


一貫性を保つ機構はプログラム側でやるしかないわけですが
完璧に一貫性を保つのは無理だという前提で、
設計する必要があります。

id:Gaasu

回答ありがとうございます。

2012/03/03 20:56:07

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません