トランザクション知人

はじめに:

MySQLのInnoDBのエンジンのサポートサービスの目的のために、それを言って前に、「トランザクション」を書く、とのMyISAMエンジンがトランザクションをサポートしていません。以下は、事務の基本的な概念、トランザクションの特性の問題だけでなく、詳細にもたらし、そのプロパティの一部で開始します。

コンセプト総務

トランザクションは、オペレーションの論理セットです

取引の特徴

アトミック(不可分)

トランザクションは、トランザクション内のすべての操作はどちらか成功したか失敗し、作業の不可分の単位です。

一貫性(一貫性)

データの前後に発生するトランザクションの整合性が一致している必要があります。例:A:200、B:200に関係なく、A、Bの間でどのように交換、及び400が最終的に保証されるの。

絶縁(アイソレーション)

データベースへのマルチトランザクションの並行アクセスは、トランザクションが他の企業干渉できない場合、複数の同時トランザクションの間でデータを互いに分離することができます。あなたは、分離を考慮していない場合は、そのような下のように多くのセキュリティ上の問題につながる:ダーティ・リード、反復不能読み取り、ファントム読み取り(ダミーリード)、以下はその拡張を紹介します。

永続性(耐久性)

トランザクションがコミットされると、それはデータベースに障害が発生したり、それがどんな影響を与えた場合でも、その後、永久的であるデータベース内のデータを変更しました

分離に起因する問題のいくつかを考慮しないでください。

ファントム(ダミーリード)を読んで、ダーティ・リード、反復不能読み取り:単離は、以下のようにいくつかの問題をもたらすと考えられていません

ダーティー読み取り

トランザクションはBのトランザクション読み込みアップデートをまだコミットしていない Bのトランザクションがロールバックされた場合、データを、そしてちょうどデータが消えトランザクションをお読みください。

非反復可能読み取り

トランザクションレコードAに最初のクエリの後、記録後のケースBは、2番目のクエリに続いて記録データが変更されたことが見出さトランザクションコミットトランザクション更新され、非反復可能読み取りが発生します。強調は提出されているその他の事項の更新データを読まれます

マジック読書(ダミーリード)

次に、トランザクションBがコミットレコード後(挿入)に挿入され、初めて二列のトランザクションにクエリは、トランザクションクエリは三列を見つけ、ファントムリードが発生します。強調は、他の挿入データのトランザクションが提出されました読まれます

(4)非反復可能読み取りのために、以下の考えです。

      ①:サービスは、トランザクション(A)、データクエリ(時間1)別のトランザクション(B)は、このレコードが変更された後にトランザクション、(時点2)の最初のものを開けてあなたはすぐに修正する(まだ提出していないトランザクションaの出願時点)を提出し、レコードの更なる照会が必要とされている場合、ビジネストランザクションaのこの時間は、非反復可能読み取りが発生します。このプログラムは、考慮されるように書かれましたが、Repeatedable読むには私たちのために問題を防いでいます。しかし、Oracleデータベースの分離レベルを達成し、そのプログラミングする際に注意を払わなければならないです。

      ②:デフォルト①2時点は、時点1において、SELECT文は、次にBのトランザクションのみ、トランザクションの終了を待つことができ、UPDATE排他ロックを追加したリリースノートロックを仮定し(その行排他ロックを取得しますクエリステートメントの終わりに基づいていないBのトランザクションが更新ステートメントのデフォルトの操作ですので、)(そうは選択しないで...更新クエリのためにロック解除の結果に)終わったが、トランザクションの終了に合わせて終了記録プラス排他的ロック、およびレコードが排他ロックに添加することができる(共有ロックは、複数追加することができ、排他的ロックは、追加することができ、データレコードに対応する排他的にロック後の増加であって、任意のロックを追加することができない場合ロックを共有しました。)

分離を具体的に実現する方法:言及する点はありますか?(ロックとMVCC)この次の章で

(3)MySQLのトランザクション4の分離レベル:

     永続(耐久性REV) :

     SQL標準は、内部および外部のトランザクションが表示されていない、目に見えるへの変更を定義する特定のルールの数を含む、分離レベルの4種類を定義します。分離の低レベルは、一般に、並行処理のより高いレベルをサポートし、より低いオーバーヘッドを有しています。

非コミットを読む(コミットが内容読み出し)
分離レベルを、すべてのトランザクションは、他のコミットされていないトランザクションの結果を見ることができます。その性能は他のレベルよりもはるかに良いではありませんので、この分離レベルはほとんど、実際には使用されません。非コミット読み取りデータは、また、ダーティリード(ダーティ・リード)と呼ばれます。

(提出を読んで)コミット読む
これは、ほとんどのデータベースシステムのデフォルトの分離レベル(MySQLのではなく、デフォルト)です。それは、分離の簡単な定義を満たす:トランザクションが唯一の変化は、企業が行う提出されている見ることができます。新しいので、コミットがあるかもしれません、その間プロセスの例では、同じトランザクションの他のインスタンスが同じで異なる結果を返すことが選択しているため、この分離レベルはまた、非反復可能読み取り(反復不能読み取り)、いわゆるサポートしています。

反復可能読み取り(再読み込みすることができます)
これはデフォルトのMySQLのトランザクション分離レベルで、それは同時の時点で同じトランザクションの複数のインスタンスがデータを読み込み、あなたは同じデータ行を参照するようになります。マジック読書(ファントムリード):しかし、理論的には、それは別の厄介な問題につながります。簡単に言えば、ファントム読み取りは、ユーザがデータ行の範囲を再読み込みする場合、データ行の範囲を読み込み、別のトランザクションおよび範囲内に新しい行を挿入するとき、あなたは「新しい発見をすることを意味しますファントム「行。この問題を解決するために、マルチバージョン同時実行制御(MVCC、マルチバージョン同時実行制御)機構を介してのInnoDBとファルコンストレージエンジン。

おすすめ

転載: www.cnblogs.com/tkzL/p/11259432.html