概要MySQLのトランザクションのロールバックメカニズム

シナリオ:
   銀行マネーは、以下のステップに分けられ、ATM機から現金を引き出す
       ; 1回のATM機ログイン、パスワード
    2データベース、認証パスワードに接続された、
    3認証は、ユーザ情報を取得するために、成功した、そのような堆積物など;
    4ユーザ入力必要離脱量、プレスが入力し、
    5はバックグラウンドデータベースからユーザアカウントに対応する金額を差し引く;
    図6をATMのお金を排出する;
    7ユーザーにお金を取ります。
    この事上の引き出しのために一歩中にエラーがある場合は、それはお金を引き出すために全体の動作をキャンセルしますが、ステップ5であれば、システムは、お金のカットを戻すが、その後、ATMマシン、アプリケーションから取り出していないされていますトランザクション内のmysql。単純に
、これらの7つのステップが完了しているいずれかのお金を得るために、またはではない何をしている、データベース内の真実です。


    トランザクションは、ユーザ定義のデータベース操作のシーケンスであり、これらの操作は完全または全体、ワークの不可分単位をしないのいずれかである、トランザクションのロールバックは、トランザクションがトランザクションで、取り消されたデータベースの更新操作が完了したことを意味します各正しい原子
エラーがアトミック操作が検出されるまでの動作が順次行われます。実際には、ロールバック操作の前に挿入されることを意味しても、それは動作を変更する場合、更新は復元する前に、次に記録を行い、削除するレコードの前に挿入を行います。
したがって、正しいアトミック操作が実際に行われ、物理実行されています。

    トランザクションは、これらのSQL文のいずれかで、そのサービスの操作で、SQL文から1つのまたは複数の部分を実行したり、実行されていないです。

    トランザクションのACIDプロパティ:原子性、一貫性、独立性、耐久性。
   
   あなたは本当に最後が削除され、現在のトランザクションで挿入されたレコードを見ることができますが、削除しませんが、値auto_increamentを変更するには


   ディスクにのみAUTO_INCREMENTは、レコード数InnoDBストレージエンジンの主キーの現在の値をメモリに格納されているため、MySQLサーバが動作しているとき、それは存在せず、カウント値:なぜ、何のロールバックをauto_increamentない
挿入削除低下しない、上げます。そして時にMySQLサーバの起動時、私たちはAUTO_INCREMENTカウント値を照会する必要がある場合、MySQLは自動的に実行されます:UPDATE FORテーブル名FROM SELECT MIX(ID)を、得るために、このステートメントを、AUTO_INCREMENT
のカラムの最大値を、そしてこの値を入れますカウンターをAUTO_INCREMENTするので、ROLLBACK MYSQLはAUTO_INCREMENTカウンター負の操作を行うことはありません


    トランザクションフラットセーブポイント、取引鎖、ネストされたトランザクション、分散トランザクション付きフラットトランザクション:種に分割されているトランザクション。


    MySQLはトランザクションで使用:
  トランザクションは自動的にすぐに、コミット操作を実行するSQL文を実行MYSQLコマンドラインコマンドに提出されています。だから、トランザクションに表示するBEGIN TRANSACTIONをまたはSTARTコマンドを使用する必要があります、またはコマンドを実行する= 0 AUTOCOMMITを設定して
、現在の回答の自動提出を無効に


   トランザクション制御文:
BEGIN / START TRANSACTIONを:表示はトランザクションが開始
COMMIT:WORKの両方が同等である使用することができるCOMMIT。COMMITは、トランザクションをコミットし、すべての変更は永続的なデータベースに対して行われていること。
ROLLBACK:あなたも同等の、エンド・ユーザー・トランザクション・ロールバックの両方も、ROLLBACKのWORKを使用することができ、そして道の下でコミットされていないすべての変更を削除します。
SAVEPOINT識別子は:あなたがトランザクション内でセーブポイントを作成することができ、トランザクションは複数のSAVEPOINT持つことができます
。RELEASE SAVEPOINT識別子を:あなたが開発されていないポイントを保存するとき、それは例外がスローされます、セーブポイントトランザクションを削除します。 
SET TRANSACTION:トランザクション分離レベルを設定します。READ UNCOMMITED、READ COMMITED、REPEATABLE READとSERIALIZABLEを備えINNODBトランザクション分離レベルのストレージエンジン。
   
    トランザクション分離レベル:データベース操作、データの正確性を確保するように、同時提案分離レベルを読み
  、以下の相違点:
  単離ダーティ・リード(ダーティ・リード)は、非反復可能読み取りのレベル(反復不能リード)マジック読み出し(ファントムリード)
  コミットされていない読み取りが未コミット可能可能可能読み取る
  ことができる可能不可能コミットコミット読取り読取り
  できる反復可能読み取りを読み取ることは不可能で繰り返すことは不可能である
  シリアルであります直列化可能不可能不可能不可能


   ダーティ読み取り:トランザクションは提出しなかった別のトランザクションにデータを読み込む
例を:トランザクションT1は、彼のレコードの内容を更新しますが、あなたの変更を提出しませんでした。ちょうど編集をキャンセルし、更新後のT1回線へのトランザクションT2、その後、T1のロールバック操作をお読みください。今読んT2ラインが無効です


   非反復リード:同じトランザクション内で、異なる内容で、その結果、同じデータを2回読み取り
、例えば:トランザクションT1だけ読み出す行の変更トランザクションT2 T1に続く行が、記録される読み取ります。その後、T1回線と、再度レコードを読み取ると結果が異なるだけ読んでいることがわかりました。それはT1が変更された元の行を読み込むので、これは、読んで、「非反復性」と呼ばれています


   マジック読書:同じトランザクション内で、同じ操作によって2回読んで、別のレコードの数が得られ
、たとえば、:トランザクションT1は、句が返さ指定WHEREの読み取り結果を設定します。新しいトランザクションT2は、行がちょうどWHERE句で使用されるこの条件T1クエリー基準を満たすために、行を挿入します。T1と、その後は再びテーブルを取得するために、同じクエリを使用して、
     今回は、彼らはただ挿入された新しい行のトランザクションT2を参照してください。T1のこの行はの突然の出現と同一であるため、新しい行が「ファントム」と呼ばれる
   
   下位分離レベル、トランザクション要求ささいな又はより短い時間を維持するために些細以下、InnoDBはデフォルトのストレージエンジンによってサポートされますアイソレーション部門はREPEATALE READであり、このデフォルトのトランザクション分離レベルで完全にトランザクション分離を保証することができました。  


   ロールバックがこのbolgを参照することができ、コードMySQLのトランザクションを実装する方法:のhttp://bbs.csdn.net/topics/390876901 

   彼らは取引されていない場合、最初のテーブルの完全な変更は、変更しなかった異常のコースを変更するための第二のテーブル、そして唯一の第二のテーブルがあるかもしれない時になるように、同時に2つの異なるテーブルをデータベースを変更するにはまだ未変性前の状態、
   及び第一テーブルが完了改変されています。あなたは彼らがあなたが最初のテーブルを変更すると、第二のテーブルが異常修正すると修正ができませんでした、トランザクション時間を設定して置いたときと、最初のテーブルと2番目の表は、変更されていない状態に戻す必要がありますこれは、トランザクションのロールバックと呼ばれています。
---------------------
免責事項:この記事はCC BY-SA 4.0の著作権契約に従う、CSDNブロガー「aschulianwuyanzuの元記事である、複製、オリジナルを添付してくださいソースリンクと、この文。
オリジナルリンクします。https://blog.csdn.net/aschulianwuyanzu/article/details/77879727

おすすめ

転載: www.cnblogs.com/lxwphp/p/11364549.html