mysql Innodb的锁和事物模型

1.共享锁和独占锁

Innodb实现了标准行级锁,锁的类型有两种shared (S) locks 和 exclusive (X) locks.

  • shared (S) locks:事物读的时候加S锁
  • exclusive (X) locks: 事物更新,删除加X锁
    如果事物t1持有某一行的S锁,其他事物请求对该行加锁的情况如下:
    1.请求加S锁可以
    2.请求加X锁需要等待
就是标准的读写锁加锁条件。
读写所有三个状态:无锁,读锁,写锁
可以加读锁的状态有:1.无锁2.读锁
可以加写锁的状态有:1.写锁

mysql使用可串行化隔离级别对加锁进行实验:
<待补充>

2.意向锁

  • 意向锁是一种表级锁,意向锁不会真的加锁,只是代表有事物正在加锁或者马上准备加锁。意向锁也分为共享锁(IS)和独占锁(IX).
  • IS锁:事务意图在表上获取一个或多个独立的行的S锁
  • IX锁:事务意图在表上获取一个或多个独立的行的X锁

例如:

  • SELECT ... LOCK IN SHARE MODE 会设置IS锁
  • SELECT ... FOR UPDATE会设置IX锁

意向锁协议:

  • 事务获取S锁之前必须先获取IS锁或者更强类型的锁
  • 事务获取X锁之前必须先获取IX锁

意向锁加锁兼容性:

  • | X | IX | S | IS
    ------| ------ | ------ | ------ | ------
    X | Conflict | Conflict | Conflict | Conflict
    IX | Conflict | Compatible | Conflict | Compatible
    S | Conflict | Conflict | Compatible | Compatible
    IS | Conflict | Compatible | Compatible | Compatible

3.记录锁(R锁)

  • 记录锁在索引记录上加锁,即使表上没有索引在innodb中也会对聚族索引加锁(innodb内部机制有索引会使用已存在的索引聚族没有的话会生成一个隐藏的索引)。
  • SELECT c1 FROM t WHERE c1 = 10 FOR UPDATE会对c1加R锁,阻止其他事物插入,更新,删除c1=10的记录。只会锁住索引上的一个记录。

4.Gap锁(G锁,间隙锁)

  • 与R锁不同,R锁只锁索引记录,G锁锁定的是索引间隙,或者范围内的索引记录<非唯一索引>。SELECT c1 FROM t WHERE c1 BETWEEN 10 and 20 FOR UPDATE; 这条sql会阻止其他事物插入一个t.c1是15的行,t.c1=15这条记录存不存在,因为在10到20之间的间隙都已经被加锁,如果t.c1不是unique的name,t.c1=15也算是间隙,应该被锁住的。
  • Gap锁只阻止不能再间隙内插入数据,所以GAP的X锁和S锁有一样的语义,多个事务可以同时持有Gap锁。
  • 间隙锁可能锁住一个索引值,也可能是多个,甚至是一个都不会锁定。
  • SELECT * FROM child WHERE id = 100; 如果id是唯一索引这里会加上R锁,如果不是唯一索引这里会加GAP锁。
  • 在Read COMMITTED隔离级别下GAP锁会失效

5.Next-Key Locks

6.Insert Intention Locks(插入意向锁)

7.AUTO-INC Locks

未完待续...

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,701评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,649评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,037评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,994评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,018评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,796评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,481评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,370评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,868评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,014评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,153评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,832评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,494评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,039评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,437评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,131评论 2 356

推荐阅读更多精彩内容