一連の操作の整合性を確保するためのトランザクション分離

一連の操作の整合性を確保するために3トランザクション分離

MySQLでのトランザクションとは何ですか?

    たとえば、次のように行動を移します

            友人はあなたの銀行カードはわずか100ドルである時に、あなたに100ドルを与えることを向けます。

 

プログラムに固有の転送処理は、更新残高を加算および減算し、そのような残高照会などの一連の作業があるでしょう、これらの操作はいずれか、または、ない減算を終えた後、プログラムまで待つことが保証されなければならない、あなたの100お金は、銀行全体であれば、ない混乱にそれをこの時間差をとり、その後、一度チェックし、その後、別の友人に転送を与える、そうすることができますか?そして、あなたは「取引」の概念を使用する必要がありました。

 

トランザクション定義:

トランザクションがあることを確認するために一連のデータベース操作はすべて成功するか、すべて失敗のどちらか。

MySQLではトランザクションのサポートはしているエンジン層の実装の。

MySQLは、マルチエンジンシステムではなく、すべてのエンジンのサポート取引です。たとえば、ネイティブのMySQL のMyISAMエンジンがトランザクションをサポートしていません。このために1つの重要な理由は、InnoDBのにMyISAMテーブルに置き換えられます

注意:のみInnoDBエンジンがサポートされているトランザクションデータベースやテーブルを

 

特長情勢?ACID

    トランザクションの4つの機能

不可分性、アトミック

一貫性、一貫性

分離、隔離

耐久性、持続性

 

アトミックアトミック操作

1つのトランザクション(トランザクション)ですべての操作が完了またはリンクの真ん中にすべてではないビームを完了されていませんか。トランザクションの実行中にエラーが発生したトランザクションが同じことを行ったことがないとして、それは、トランザクションの開始前の状態に(ロールバック)にロールバックされます。

 

整合性データベースの整合性

そして、トランザクション開始前に、トランザクションの終了後に、データベースの整合性が破損していません。これは、書き込まれたデータは、データの正確性を含んでいるデフォルトのルールのすべて、に完全に準拠しなければならないことを意味し、フォローアップのデータベースのシリーズは、自然発生的にスケジュールされた作業を完了することができます

物事の間の絶縁分離

同時トランザクション・データベースの複数の同時読み出しを可能にし、機能を記述し、そのデータを変更する複数のトランザクションが同時に矛盾したデータにクロス実行結果を実行するとき、分離を防止することができます。非コミット読み取り(非コミット読み取り)、コミットを読む(コミット読み取り)、反復可能読み取り(反復可能読み取り)及びシリアライズ(直列化)を含む異なるレベルに分割トランザクション分離

 

耐久性データ変更の永続性

取引後、データを修正するためにシステム障害が失われることはありません場合でも、永久的です

 

注意:

それは、SQL文を実行することです後にMySQLのコマンドライン・トランザクションが自動的に提出されたデフォルト設定では、操作が直ちに実行されますCOMMIT。そのため、明示的に無効にするために使用されるコマンドのSET AUTOCOMMIT = 0、コマンドを開始するか、トランザクションを開始、または実行使用してトランザクション開くことをお勧め現在のセッションを自動コミット。

 

隔離隔離を理解することが重要

同時に、データベース上で実行複数のトランザクションがある場合、それはこれらの問題を解決するために、ダーティ・リード(ダーティ・リード)、非反復可能読み取り(非反復可能読み取り)、ファントムリード(ファントムリード)問題が表示されることがあり、「あります分離レベルの概念」。

 

ダーティ読み取り:トランザクションの途中で別のコミットされていないデータ・トランザクションを読みます

トランザクションは、データが複数回変更されますが、このトランザクションの変更で、この何回もデータにアクセスするために、その後、同時トランザクションをコミットしていない場合は、データの不整合を得られた二取引が発生します

非反復可能読み取り:非反復リードトランザクションスコープ内のデータのデータベースを指すクエリは、クエリ間隔に起因している別のトランザクションによって変更およびコミット異なるデータ値を返すを繰り返しています。

   例えば、リードデータトランザクションT1、T2と直ちにトランザクションデータを変更し、データベースに送信トランザクションは、トランザクションT1は、データが再度読み出されるが、非反復可能読み取り伝送を、異なる結果を得ました。

   読書と非読み違いが汚れている繰り返し、非反復可能読み取りが提出され、以前のトランザクションデータを読み込みながら、ダーティリードトランザクションは、別のコミットされていないトランザクションからのダーティデータを読み込んで

 

仮想読書:魔法の読書は、トランザクションが非独立した実行起こる現象です。例えば、トランザクション処理の「2」から「1」に行われたすべての行のテーブル内のデータ項目にT1が、今回は表の行の値は、データ項目、データ項目およびトランザクションT2に挿入されますまたは「1」とデータベースにコミット。私たちはデータを修正するかどうかを確認するために、トランザクションT1のユーザーの操作は、あなたが変更していない行があるでしょう、これはファントム読み取り起こったことで、同じように、実際には、このラインは、幻覚のように、トランザクションT2から追加されます。

 

   ファントムは読み込み、非反復可能読み取り(これはダーティリードとは異なる)、差がある非反復可能読み取りクエリデータ項目は同じですが、グループのための読書のマジック提出された別のトランザクションを読んでいます(そのようなデータの数など)全体のデータ。

 

分離レベルの話をする前に、まずあなたがよりタイト、低い効率を分離することを知っている必要があります。非常に多くの時間が、我々は2つの間のバランスを見つける必要があります。SQL標準のトランザクション分離レベルであって、非コミット読み取り(コミットされていない読み取り)、コミット読み取り(コミット読み取り)、反復可能読み取り(反復可能読み取り)と、シリアライズ(直列化可能)。私はあなたのために一つ一つを説明しましょう:

 

非コミット読み取り:トランザクションが提出されていない場合、それは他の事項を変更することがわかります。

 

提出を読むことは、トランザクションがコミットした後、それは変更が他のトランザクションによって見られるし、いい。

 

反復可能読み取りを使用すると、データが一致している起動時に常にこの取引に参照、データを参照するトランザクションを実行するプロセスを意味します。もちろん、反復可能読み取り分離レベルの下で、他のトランザクションのコミットされていない変更は表示されません。

 

シリアライズ、名前が示すように、同じ行のレコードで、「書き込みロック」を追加します「書き込み」、「読み」は「ロックをお読みください。」が追加されます 読み書きロックの競合が今、トランザクションの実行前に待機しなければならないトランザクションの訪問の後に完了すると、順番に続行します。

        

おすすめ

転載: www.cnblogs.com/binyang/p/11260298.html