サービスとトランザクションの隔離

   まず、トランザクションの概念:Aのトランザクションは不可分の単位は、トランザクション内のすべての操作が正常に正常に実行された場合、トランザクション全体がデータベースに提出されたのみからなるデータベース操作のための1つまたは複数のSQL文で構成されています。

     注:1.総務が成功したか失敗した、部分的な成功と失敗はアトミック動作を保証することはできませんいずれかのすべての実行、SQL文のセットを実行することです。

                2は、データトランザクションのすべてのトランザクションを提出(コミット)するためには、正常に実行され、結果がディスクに書き込まれます。

                3は、実装プロセス内のトランザクションは、SQLエラーが発生しているがあり、トランザクションは初期状態に戻す(ロールバック)巻かれている必要があります。

   第二に、取引の役割

エンタープライズアプリケーションのためのトランザクション管理が重要である、それがバックグラウンドデータの整合性を損なうていない珍しい訪問、があった場合でも、すべてのユーザ操作の信頼性が確保されます。銀行のATMのATMのように、ATMは通常、顧客サービスのために正常であることができ、また必然的に発生し、アカウントがない前に、操作の彼らの突然の故障、この時間は、トランザクションがトラブルのない動作を保証しなければなりませんユーザーと銀行の利益が失われないことを保証するように、ユーザーがATM機を使用していなかったかのように、有効になります。

  三、トランザクションのACID特性:(4)

           1、アトミック(原子)

                トランザクションは不可分全体で、それはすべての実行またはすべての実行されていないのいずれか、不可分のトランザクションを原子の性質を持っている必要があります。すべてのトランザクションのすべてのサブトランザクションが正常に送信された場合は、すべてのデータベース操作は、データベースの状態の変更を提出され、サブトランザクションは、データベース操作、他のサブトランザクションがロールバックされて失敗したがある場合、トランザクションの実行前の状態に戻っているデータベース、状態遷移が発生しません。

           図2に示すように、一貫性(整合性)

                トランザクションデータベースを実行するように正しくある状態から別の状態に正しい変換

           図3に示すように、分離(単離)

                適切なトランザクションがコミットする前に2つの以上のトランザクションは、データのセキュリティを確保するために、同時操作を目覚めさせた場合、トランザクションが正常にトランザクションの前に提出されたその他の事項に提供されるデータを変更することはできません、それかもしれません結果は、他の事項に示すべきではありません

           4、持続性(耐久性)

                 トランザクションが正常に提出された後、結果があっても、常に他の障害トランザクションがコミットされた後、トランザクションの処理結果が保持されますが、また、トラブルシューティングの後にデータを回復すると、データベースに保存されます。

   四回の同時トランザクションは、次の問題が生成されます(3)

         1、ダーティ・リード

           いわゆるダーティリードは、参照トランザクションAトランザクションBは、データが送信されていません読み込みます。1000年には、このようなトランザクションB、開いているトランザクションのトランザクションBに切り替え、銀行、オープントランザクションAトランザクションとして総お金を持っている- > ATM 100、スイッチトランザクションAに戻ったが、今回のこの時間の読み取りトランザクションA銀行の資金のみ900しかしため、操作の背後に不適切なトランザクションB、成功したロールバックした後、アカウントまたは確かに、元のバランスのバランスが、トランザクションにしているデータベース、100を削除していない、撤退するために中断有数の唯一の900銀行の資金調達を読んで、汚れています読み。

        2、非反復可能読み取り

           非反復可能読み取り、いわゆる、を指し、2倍のデータが読み出されたデータの矛盾を読まれるトランザクションまたは銀行のお金で、例えば、トランザクションAトランザクションオープン- > $ 1000の銀行カードの残高を見つけ、開いているトランザクションのトランザクショントランザクションB Bに切り替えるために、この時間は- >データベース内で、提出- > Bのトランザクションは$ 100.00削除900元のバランスが、この時点での取引は二度同じトランザクションで、トランザクションAので、チェックは再び900元の口座残高を見つける、トランザクションに切り替えないようにしている、一貫性のない口座残高のデータを読み込みます反復可能読み取り。

        3、ファントム読み取り

          いわゆるファントムは、読むことを意味し、単一のトランザクションの操作で操作されていないデータを見つけます例えば、学生情報、トランザクションAトランザクションオープン- > B、オープントランザクション・サービスにBに切り替えるために、この時点でその日の条件が偽であることを出席中のすべての学生、トランザクションを修正- >トランザクションBが生徒データを挿入し、その後、バックトランザクションAトランザクションに切り替えます提出の際には、私は同じ幻覚が起こったかのように、魔法を読まれる変更されたデータを、見つかりませんでした。前提ファントム読み取りは並行トランザクションは、トランザクションが場所取った場合に発生し、挿入、削除の操作を。

   、トランザクションの分離レベル(5)

   1、DEFAULT(デフォルト分離レベル)

    各データベースをサポートするトランザクションの分離レベルは、Spring構成取引、基礎となるデータベースのデフォルトのトランザクション分離レベルならば、この値に隔離セット、同じではありません。

    MySQLを使用している場合ところで、あなたは「使用することができますSELECT @@ TX_ISOLATIONをデフォルトのトランザクション分離レベルを確認します」

   2、READ_UNCOMMITTED(非コミット読み取り)

     即ち、別のトランザクションにデータを読み取ることができるが送信されていない、このレベルは分離機構で解決できないことは明らかであるダーティ読み出し非反復可能読み取りファントム読み取り従ってほとんど使用のいずれかを

   3、READ_COMMITED(読み取りコミット)

    それは自然にダーティリードを防止することができます提出されたデータを読み取ることができますが、制限することはできません非反復可能読み取りファントム読み取り

   4、REPEATABLE_READ(反復可能読み取り)

   データはに似たロックを、読み出した後にそれは、「XXXからの更新のために選択*」され 、 明確なデータが読み出されたので、他の人がそれを変更防ぐためにロックを追加するために、アップデートを使用することです。REPEATABLE_READの意味は、データが、これはトランザクションの終わりではない、読んで、他のトランザクションが、これはダーティリード、非反復可能読み取りの問題を解決するだろう、このレコードを変更することはできません、似ていますが、ファントムは読んで問題が解決されていません

   5、SERLALIZABLE(シリアライザ/シリアライズ)

   最高のトランザクション分離レベルは、すべての子供たちに1つのトランザクションずつ実行した後、トランザクションが別のトランザクション内のすべてのサブトランザクションを実行することができますどのように多くの取引、関係なく、これはダーティリード、反復不能読み取りとファントム読み取りの問題を解決します

               

       注:トランザクション分離レベルが高すぎる可能な限り、トランザクションの分離レベルが高く設定されて設定されていない、ロック手段は、トランザクションの正確さを保証するための手段を取るためにバインドされ、その後、効率は実際の開発それほど頻繁に、削減されます効率と同時妥当性の間で選択をする、通常の状況下ではREAD_COMMITEDに設定されている、汚れを避けるために、この時間は、非反復可能読み取りとファントムを解決するために、いくつかの他の手段で、後でその後、同時実行も良いです読んで、問題を読んでうまく。

 

       第六に、業務のトランザクションSQL

       1.提出の業務をチェックしてください:@@自動コミットを選択します。

      

       図1は、自動的にSQL文がトランザクションであることを提出したときにトランザクションが自動的に送信され表しています。

        0は、トランザクションのコミットを使用して、手動時にマニュアルの提出を提出していることを示し、前述の更新時に文の提出は、別のトランザクションによって検出されます。

   2.方法のセットトランザクションがコミット:SETを   自動コミット [1] = 0;

       

       トランザクションをオンにします。3.:始めます。

       4.トランザクションをコミット:コミット。

      バックトランザクションの初期状態にロール:ロールバック。

       6.位置Tとして、セーブポイントを設定:Tセーブポイントという。

       セーブポイント位置T 7.ロールバックTへROLLBACK。

    注意:一般的にはコマンド3-7、マニュアルの提出を使用しました。

 

      分離レベルを確認し、修正するための七つの事柄

       1. チェックトランザクション分離レベル:@@ tx_isolationを選択 

       2. [変更現在のセッションのトランザクション分離レベル:のSET TRANSACTION ISOLATION LEVELセッションシリアライズ;(パラメータとすることができます:読み取りUNCOMMITTED |読むがコミット|反復を読む|シリアライズ)

        3.変更グローバル・トランザクションの分離レベル:のSET TRANSACTION ISOLATIONは、株式会社無料LEVEL Serializableの参加、(パラメータが使用できます読み取りUNCOMMITTED |読むがコミット|反復を読む|シリアライズ)

         注意:            

             )などMyBatisの、getSqlSession(と、セッションのトランザクション分離レベルを変更し、あなただけ効果的に今回のセッションを取得することができます。このようCMDコマンドラインとして、これだけの時間を窓が有効です。

             、後続のすべてのセッションのために有効な、その後、グローバル・トランザクションの分離レベルを変更し、既存のセッションは影響を受けませんの

 

       推奨します。https://www.cnblogs.com/snsdzjlz320/p/5761387.html、

 

    

おすすめ

転載: www.cnblogs.com/ljl150/p/12005660.html