2012-02-12 3 views
0

私はこれに対する答えを見つけることはできませんでした。それはわかりません。誰でも。すべてが真を返すまで、mysql操作を停止してください

データベース上の複数の操作、例えばを持っている場合:

if(insert_something_to_db($data) == TRUE){ 
    if(delete_something_else_from_db($data2) == TRUE){ 
      if(update_something_related_to_the_others_in_db($data3) == TRUE){ 
       return TRUE; 
      } 
    } 
} else { 
    return FALSE; 
} 

ネストされたクエリのいずれかが失敗した場合は、以前の操作は、データベース内の乱雑なデータで、その結果、締結されているでしょう。それらがすべて成功するかどうかを知るまで、操作の実行を中止することは可能ですか/いくつかのテクニック/ベストプラクティスです。

私は例があります。

人がグループに参加したい場合、彼は 「グループに参加」をクリックする - 通知はデシベルで作成されます。これは、グループオーナーの管理パネルに表示されます。 - グループ所有者は、アプリケーションを拒否/承諾できます。

受諾: - 申請者のユーザーデータは、新しいグループ情報で更新されます。 - グループ管理者に最初に送信された通知が削除されます。 - 申請者に新しい通知が作成され、承認されたことを通知します。

最も外側の条件がfalseを返す場合(ユーザーデータが更新されると仮定します)、実際のデータベースは元のデータを保持しています。最初の更新が終了し、次の更新が行われなかった場合、プロファイルは新しいグループとのリンクを反映するように更新されましたが、グループ管理者領域の通知は消えません。

よろしく デニスあなたはすべてのクエリは、全か無かの動作を保証するために、transactionになりたい

答えて

3

は基本的に、あなたは以下となります。

    は取引
  • は、すべてのクエリが成功している場合は、クエリ
  • そして最後に
    • を行うトランザクションにエルス
    • をコミット、ロールバックを開始
    • 取引


あなたは、より一般的な情報のために、参照することもできます。Database transaction

+0

素晴らしいです。ありがとうございました。 – Dennis

+0

歓迎します:-)楽しんでください! –

関連する問題