锁的类型以及粒度,两段锁协议,隐式和显示锁

锁的粒度

行级锁 表级锁

应尽量只锁定需要修改的那部分数据,而不是所有资源。锁定的数据量越少,发生锁争用的可能性就越小,并发行就越高。

加锁需要消耗资源,锁的各种操作都会增加系统开销。因此锁的粒度越小,系统开销就越大。

在选择锁的粒度时,需要在锁开销和并发程度之间作一个权衡

锁的类型

1.读写锁

  • 排他锁,简写为X锁,又称写锁
  • 共享锁,简写为S锁,又称读锁

规定:

  • 事务对数据对象A加了X锁,就可以对A进行读取和更新。加了X锁,其他事务就不能再对该数据加锁了
  • 事务对数据对象A加了S锁,就可以对A进行读取操作,但不能进行写操作,其他事务可以对A加S锁,但不能加X锁。
    即只有S锁和S锁时兼容的

2.意向锁

避免加表锁前逐行确认是否加了锁。逐行确认太过麻烦。
意向锁的作用:
假如事务A想要申请整个表的写锁,那么它需要逐行判断是否有读锁或写锁存在,效率太低。
意向锁就是在加锁前,先对该表加一个意向锁(IX或IS)。这样之后再有事务要申请表的X可以直接判断表上是否有S\X\IX\IS存在,有的话就先阻塞。

意向锁是在原有的X/S锁之上引入IX/IS,IX/IS都是表锁,用来表示一个事务想要在表中的某个数据行上加X锁或S锁。有以下两个规定:

  • 一个事务在获得某个数据行对象的S锁之前,必须先获得表的IS锁
  • 一个事务在获得某个数据行对象的X锁之前,必须先获得表的IX锁

各种表的兼容关系(能否在有另一个锁的时候加锁):
IX\IS之间两两兼容,X\S之间只有S\S兼容
X和任何锁都不兼容,S锁还和IS锁兼容
综上:只有IS\IX之间,S锁和IS、S之间兼容,其它均不兼容

MySQL四种锁的兼容关系.png

三级封锁协议

一级封锁协议

事务T要修改数据A必须先加写锁X,写完再释放。由于X锁之间不兼容。
故解决了数据写覆盖的问题。
但不能解决脏读问题

二级封锁协议

在一级封锁协议的基础上,要求读取数据时必须加S锁,读取完马上释放S锁

可以解决脏读问题。事务A不会读到事务B修改了但没提交的可能的脏数据。

三级封锁协议

在二级的基础上,加了S锁,但在事务结束的时候才释放S锁。
解决了不可重复读问题。因为在事务没有释放S锁之前,没有其它事务能够修改该数据

两段锁协议

两段锁协议规定所有的事务应遵守的规则:
  ① 在对任何数据进行读、写操作之前,首先要申请并获得对该数据的封锁。
  ② 在释放一个封锁之后,事务不再申请和获得其它任何封锁。
定理:若所有事务均遵守两段锁协议,则这些事务的所有交叉调度都是可串行化的。
充分条件,不是必要条件

MySQL隐式和显示锁定

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

推荐阅读更多精彩内容

  • 引言 数据库锁定机制简单来说就是数据库为了保证数据的一致性而使各种共享资源在被并发访问变得有序所设计的一种规则;对...
    高级java架构师阅读 725评论 0 1
  • 死锁产生的原因和解锁的方法 产生死锁的四个必要条件: (1) 互斥条件:一个资源每次只能被一个进程使用。 (2) ...
    憩在河岸上的鱼丶阅读 1,483评论 0 4
  • 这种红晶晶的小果实,吸引了我的眼球,也吸引了如月。 小家伙,摘到一颗放进嘴里。很是满足。紧接着就是怪异的表情。因为...
    吉祥凤玲阅读 212评论 0 0
  • 今天周日,佳琪还有作业没有写完,吃过饭后磨蹭了很久,在我的催促下才去写了作业。中间有同学来找她,可是没完成作...
    A宝_8f50阅读 207评论 0 0
  • 创建窗口 1.初始化pygame 2.创建游戏窗口 3.游戏循环 显示文字 设置窗口的背景颜色 1.创建字体对象 ...
    剑眉星目cz阅读 488评论 0 3