Mysqlのロック
1408 ワード
ロックの分類粒度:表錠/行錠/隙間錠 方式:リードロック(共有ロック)/ライトロック(排他ロック) 態度:悲観ロック/楽観ロック 悲観錠(読解錠、作文ともに悲観錠) 楽観ロック(楽観ロック、外部プログラム実装が必要)
一、錠の粒度
テーブルロック
行ロック
ギャツプロック
にじょうほうしき
リードロック
T 1テーブルにリードロックが付いているので、T 1テーブルは読み書きしかできません.同時に【ロックスレッド】は制限されています.他のテーブルにアクセスできません.
例として、 Aトイレの1号室に入り、仕切りドアを閉めない(リードロックを使う)、 Bでは、この仕切りに何が起こっているのか(他のスレッドでは読めますが)見ることができますが、この仕切りはこれ以上使用できません. Aは仕切りドアが閉まっていないため、書き込み操作もできず、他の仕切りにもアクセスできません.
Aスレッドがtable 1にリードロックをかけている
スレッド
操作
table1
table2
説明
A
R
O
-
Aスレッドはすべて自分のtable 1のみ
A
W
-
-
書く権利がない
B
R
O
O
Bスレッドはtable 1の読み取り権限に制限はありません.
B
W
-
O
Bスレッドはtable 1に対する書き込み権限が制限されている.
書き込みロック
トリプルロックの態度
悲観ロック
悲観的なロックタスクはデータを使います.データは受動的にロックしてからにします.リードロック、ライトロックは悲観的なロックです.
楽観ロック楽観ロックは、私が更新するときに他の人は変更しないと考えています.まず実行して実行が成功しなかったら、もう一度実行します. 実装形態1は、統計フィールド を用いる.実装形態2は、タイムスタンプ を用いる.の2つの実現方式の原理は同じ である.
インプリメンテーション1は、統計フィールド、またはバージョンフィールドを使用します.
upcount 1は楽観的なロックの実現である.
実装方式2タイムスタンプ
一、錠の粒度
テーブルロック
行ロック
ギャツプロック
にじょうほうしき
リードロック
T 1テーブルにリードロックが付いているので、T 1テーブルは読み書きしかできません.同時に【ロックスレッド】は制限されています.他のテーブルにアクセスできません.
例として、
Aスレッドがtable 1にリードロックをかけている
#
lock table table1 read;
スレッド
操作
table1
table2
説明
A
R
O
-
Aスレッドはすべて自分のtable 1のみ
A
W
-
-
書く権利がない
B
R
O
O
Bスレッドはtable 1の読み取り権限に制限はありません.
B
W
-
O
Bスレッドはtable 1に対する書き込み権限が制限されている.
書き込みロック
トリプルロックの態度
悲観ロック
悲観的なロックタスクはデータを使います.データは受動的にロックしてからにします.リードロック、ライトロックは悲観的なロックです.
楽観ロック
インプリメンテーション1は、統計フィールド、またはバージョンフィールドを使用します.
# 1 ,
select upcount1 from table ;
> upcount1 = 3
# 2 ,
update name='xiaoxiao' , upcount=upcount+1 where id = 1 and upcount=3 ( 3 )
upcount 1は楽観的なロックの実現である.
実装方式2タイムスタンプ