人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

●質問者: Gaasu
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● oil999
●50ポイント

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

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

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


Gaasuさんのコメント
回答ありがとうございます。

2 ● taroe
●50ポイント

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



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

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


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


Gaasuさんのコメント
回答ありがとうございます。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ