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

PHP(PEAR::DB)+mySQL5でユーザー管理ツールを作成しています。
ある機能でDBを複数更新する処理があるのですが、信頼性について質問があります。

$db = DB::connect($dsn);
$db->autoCommit(FALSE); // 自動コミット解除

$rs = $db->query('UPDATE table SET data1=1'); …?
if (DB::isError($result)) {
$db->rollback();
die($result->getMessage());
}
$rs = $db->query('UPDATE table SET data2=1'); …?
if (DB::isError($result)) {
$db->rollback();
die($result->getMessage());
}
$db->commit();

質問は、上記処理(PEAR::DBを使用)において、
?が成功し?が失敗した場合に?のロールバックを保障してしてくれるかどうかです。
実験ではうまくいっているようなのですが、みなさんのご指摘があればよろしくお願いいたします。

※ 普通ならPDOでアクセスするんでしょうが、よろしくおねがいいします。

●質問者: cochoo
●カテゴリ:ウェブ制作
✍キーワード:CONNECT DB DSN Pear PHP
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● b-wind
●60ポイント ベストアンサー

$db->autoCommit(FALSE); // 自動コミット解除

自動コミットをオフにするということは逆説的にトランザクションを開始することを意味します。


そして rollback を行う事は「トランザクション開始以降のすべての変更」を元に戻すことを意味します。

(シーケンスの類など一部例外はありますが)


?が成功し?が失敗した場合に?のロールバックを保障してしてくれるかどうかです。

これは接続方法に関係なく、「MySQL」が保証してくれます。


注意点としては MySQL でトランザクションを使用する前提となる

InnoDB などのテーブルを使用することだけです。( MyISAM は不可 )

◎質問者からの返答

rollbackの定義である「トランザクション開始以降のすべての変更」の「すべて」がずっと気になっていました。

「すべて」というのが「トランザクション開始=autoCommit実行時」?「commit」内で処理されたということで認識できました。

この点がわかりやすく書かれている文献が見当たらなかったもので、b-windさんの説明ですごくよくわかりました!!

DBエンジンは、おっしゃるとおりInnoDBにしております。

ありがとうございました。

関連質問


●質問をもっと探す●



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