Mysqlのロック

1408 ワード

ロックの分類
  • 粒度:表錠/行錠/隙間錠
  • 方式:リードロック(共有ロック)/ライトロック(排他ロック)
  • 態度:悲観ロック/楽観ロック
  • 悲観錠(読解錠、作文ともに悲観錠)
  • 楽観ロック(楽観ロック、外部プログラム実装が必要)

  • 一、錠の粒度
    テーブルロック
    行ロック
    ギャツプロック
    にじょうほうしき
    リードロック
    T 1テーブルにリードロックが付いているので、T 1テーブルは読み書きしかできません.同時に【ロックスレッド】は制限されています.他のテーブルにアクセスできません.
    例として、
  • Aトイレの1号室に入り、仕切りドアを閉めない(リードロックを使う)、
  • Bでは、この仕切りに何が起こっているのか(他のスレッドでは読めますが)見ることができますが、この仕切りはこれ以上使用できません.
  • Aは仕切りドアが閉まっていないため、書き込み操作もできず、他の仕切りにもアクセスできません.

  • 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は、統計フィールド
  • を用いる.
  • 実装形態2は、タイムスタンプ
  • を用いる.
  • の2つの実現方式の原理は同じ
  • である.
    インプリメンテーション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タイムスタンプ