トランザクション管理(ACID)とトランザクション分離レベル

https://blog.csdn.net/dengjili/article/details/82468576

そういえば業務は、一般的に次の4点です

アトミック(不可分)
アトミックトランザクションがいずれかのトランザクションに作業操作の不可分単位で発生し又は発生しないことを意味します。
一貫性(一貫性)
トランザクションの前と後のデータの整合性が一致していなければなりません。
分離(アイソレーション)
複数のユーザデータベースへの同時アクセスは、ユーザが各トランザクションのデータベースを開くトランザクション分離は、操作データは、同時複数のトランザクション間の分離のために、他のトランザクションによって妨害することができません。
永続性(耐久性)
持続性は一度トランザクションがコミットされることを意味し、それがデータベースに障害が発生したり、それがどんな影響を与えた場合でも、その後、永久的であるデータベース内のデータを変更しました

簡単な例として、ことを上記4点を理解

不可分性

同じトランザクションのために

 

このプロセスは、2つのステップを含み、

:800 - 600 = 200
B:200 + 200 = 400

成功、または失敗を持つ2つのステップが1アクションだけでなく、発生しており、一緒に言ったの原子

一貫性(一貫性)

操作前と操作後のトランザクションの一貫性のある状態の場合

 

800、B:200操作Aの前に
動作Aの後:600、B:400

取引完了後の整合性表現、論理演算であります

永続性(耐久性)

データは、トランザクションがデータ損失の外部要因で終わっていないことを示しています

800、B:200操作Aの前に
動作Aの後:600、B:400
(まだトランザクションをコミットしていない)場合は、サーバーの動作の前にダウンしているか、電源がオフし、データベースを再起動した後、ステータスデータがあるべき
800、B:: 200
(トランザクションがコミットされる)は、サーバの動作が停止またはパワーオフした後、データベースの再起動後、ステータスデータがなければならない場合
:B、600:400

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

複数の同時ユーザーのために、主にこの取引上のその他の事項の影響を排除するために

 

2つの同時トランザクションを、前記読み出しトランザクションをまだ提出していない別のトランザクションデータに、B


トランザクション分離レベル

ダーティ読み取り:

それは別のコミットされていないトランザクションのデータを読み込み、トランザクションを指します。

 

###非反復読取り:
トランザクション内のデータ・テーブルの行を読み取り、何度も異なる結果を読み取ります。(これは必ずしも間違っていないですが、いくつかの例にはありません)

ページ統計値の問い合わせ

B転送誰かが300に来たときに、ファイル名を指定して実行レポートをクリックします(トランザクションが提出されました)


ダミーリード(ファントムリード)

これは矛盾で読み取り結果の前と後に、データ挿入を読み取るために、別のトランザクションで取引を指します。
(典型的には、行以上の行に影響を与えます)

 

セット4つの分離レベル

####データベースの
設定トランザクションの分離レベルを設定トランザクションの分離レベルは、
現在のトランザクションの分離レベルを照会tx_isolation @@選択します

設定説明
Serializableを避けるの汚れは、非反復可能読み取り、起こってからダミーリード、読み込みます。(シリアライズ)
反復可能読み取りが起こってから、ダーティリード反復不能読み取りを避けます。(反復可能読み取り)
汚れを防ぐためにコミット読み取り(コミット読み取り)起きてから読み込みます。
コミットされていない最低レベルを読んで、上記は保証されません。(非コミット読み取り)
#### Javaの
適切な接続法ようにsetAutoCommitやsetTransactionIsolation

説明設定
ダーティ・リードことを示すTRANSACTION_SERIALIZABLE定数、非反復リードおよびダミーリード。
その汚れたことを示すTRANSACTION_REPEATABLE_READ読み取りおよび非反復可能読み取りは一定ではない発生、ファントムが発生する可能性が読み取ります。
ダーティ(ダーティ・リード)を読み出すTRANSACTION_READ_UNCOMMITTED指示は、リードおよびダミーリード定数は(ファントムリード)繰り返さないことができます。
TRANSACTION_READ_COMMITTED定数ダーティが起こっても起こらなくても読み取ることを示す;非反復読み取り、およびファントム読み取りが起こります。
mysqlのシミュレートされたトランザクション分離テスト

@@ session.tx_isolationを選択します。
@@ tx_isolationを選択します。

非コミット読み取りSET SESSIONトランザクション分離レベル。
SET SESSIONのTRANSACTION ISOLATION LEVELの読み取りがコミット。
SET SESSIONトランザクション分離レベル反復可能読み取り、
シリアライズ可能なSET SESSIONトランザクション分離レベル。

トランザクションを開始。

-テーブル構築する
ドロップテーブル量;
CREATE TABLEのAMOUNT`( `
` id` VARCHAR(10)NULL、
`money`数値NULLを

;
-データを挿入する
量(ID、お金)に挿入する値( 'A'、800) ;
( 'B'、200である)量(ID、金)の値に挿入;
(ID、金)の値( 'C'、1000)量に挿入;
-テスト反復可能読み取り、データの挿入
量に挿入(ID、お金)の値( 'D'、 1000);

-トランザクションを設定し
、SET SESSIONのトランザクション分離LEVEL READ UNCOMMITTED
SELECT @@ TX_ISOLATION;
-オープントランザクション
開始トランザクションを、

-汚れたデモを読み出し、他のトランザクションのコミットされていないデータを読み取る
-カラム1の場合、トランザクション:B 200ターン、トランザクションII:変化量を表示するB、トランザクションは、トランザクション・ロールバック
お金=貨幣セット更新量- 200 ID = WHERE 'A';
更新設定された量マネーマネー+ = 200 WHERE ID = 'B'です。

-非反復可能読み取りプレゼンテーションデータが提出され、他のトランザクションを読んで
-列2の場合は、トランザクション:200 AをオンにするBは、二つのトランザクション:B 200回転数100rpm Cに
SESSIONはレベルがREAD COMMITTED分離のSET TRANSACTION;

-オープントランザクションの
トランザクション開始;
- 2つのトランザクションが(十分な量が転送を満足するかどうかをチェックし、転送する前に必要)チェックデータである
SELECT *金額から;
-トランザクション:Bに200回転A
アップデートマネー=マネー設定量- WHERE ID = 200は'B'であり、
更新設定された量マネーマネー+ = 200 WHERE ID = 'A'です。

コミット;
-二つのトランザクションを:Bを200rpmに100rpmでC
更新設定された量マネーマネー= - 100 WHERE ID = 'B';
更新マネー設定量WHERE ID =マネー+ 100 = 'C';
COMMIT;
-トランザクションから図の2点は、リードデータトランザクションは、負の数の量で得られた、トランザクションをコミット

-マジックリーディングデモ
-行3の場合、トランザクション:200 A、二つのトランザクションオンにB:スイッチ100をオンにするのB C 200を
ISOLATION LEVEL反復可能読み取りSESSION SETトランザクションを。

-オープントランザクションの
トランザクション開始;
- 2つのトランザクションが(十分な量が転送を満足するかどうかをチェックし、転送する前に必要)チェックデータである
SELECT *金額から;
-トランザクション:Bに200回転A
アップデートマネー=マネー設定量- WHERE ID = 200は'B'であり、
更新設定された量マネーマネー+ = 200 WHERE ID = 'A'です。

コミット;
-二つのトランザクションを:Bを200rpmに100rpmでC
更新設定された量マネーマネー= - 100 WHERE ID = 'B';
更新マネー設定量WHERE ID =マネー+ 100 = 'C';
COMMIT;
-トランザクションからビューの二つの角度は、リードデータトランザクションは、負の数の量で得られた、トランザクションをコミット
。1
2
3
4
5
6
7
8
9
10
11
12である
13である
14
15
16
17
18である
。19
20
21であり、
22は
23である
24
25
26である
27
28
29
30
31れます
32
33である
34である
35
36
37
38である
39
40
41れます
42は、
43が
44である
45
46である
47
48
49
50
51である
52は
53である
54である
55
56は
57である
58
59
60
61である
62は
63である
64
65
66
67
68
69
70
71である
72
トランザクションは、操作をコミットシリアライズ2つのトランザクションが待機します

https://blog.csdn.net/dengjili/article/details/82468576

 

おすすめ

転載: www.cnblogs.com/YuyuanNo1/p/11400965.html