InnoDB Lock Simulator

これは何?

MySQLのデフォルトストレージエンジンInnoDBのロックの挙動をイメージするために作られたおもちゃ。
おもちゃなので軽い気持ちでポチポチと遊んでください(^o^)/
ただし、あくまで作者の頭の中のindex走査のイメージを可視化したものであって、正しくInnoDBの挙動を表しているものではないのでご注意ください。
間違いや改善案を見つけた方はIssueもしくはPullRequestsを作って頂けると嬉しいです。=> GitHub

ロックの配色

Record Lock レコード単位のロック。例えばselect for updateで獲得できる。
Gap Lock 単に抑制的(purely inhibitive)でGapへのデータ挿入を許さないだけのロック。select for updateとは競合しないので注意。
Next-key Lock 効果はレコードロックと同様。最後にスキャンされた行の次の行にかかるレコードロック。

テーブルの説明

口座情報を管理するaccountsテーブル。カラムはidとbalanceだけのシンプルな設計。
idにはPRIMARY KEY制約がかかっている。balanceにはindexが張られていないものとする。
また、index走査はid昇順で動く設定とする。

accountsテーブル

id balance
Gap: -∞ ~ -1 -
1 100
2 200
3 300
4 400
5 500
Gap: 6 ~ 9 -
10 1000
Gap: 11 ~ 19 -
20 2000
Gap: 21 ~ +∞ -
コメント

select * from accounts for update

{where clause}

Reset where balance = 500 where id = 3 where id = 8 where id = 10 where id = 25 where id < 3 where id < 8 where id > 3 where id > 8 where id <= 3 where id <= 5 where id <= 8 where id >= 3 where id >= 5 where id >= 8