开发者社区> 问答> 正文

InnoDB存储引擎的锁的算法有三种?

InnoDB存储引擎的锁的算法有三种?

展开
收起
请回答1024 2020-03-31 11:03:01 1545 0
1 条回答
写回答
取消 提交回答
  • 从贵州电信网厅,到阿尔巴尼亚TTNET、委内瑞拉Cantv的固网激活等项目,再到激活产品研发,在中兴软创国际OSS产品线开发岗位上有6年开发经验,如今在阿里云业务运营中台做商品和账务,对企业级应用开发和架构有丰富经验。

    InnoDB存储引擎的锁有两种,一种是表锁(table-level locking),一种是行锁(row-level locking),默认是行锁,你说的三种算法是指行锁算法: 1) Record Lock:单个行记录上的锁 2) Gap Lock:间隙锁,锁定一个范围,但不包含记录本身 3) Next-Key Lock:Gap Lock+Record Lock,锁定一个范围,并且锁定记录本身。 这个可以参考这篇文档 https://www.jianshu.com/p/f3868e608c8c

    而表锁的算法则不同,分为写锁和读锁, 写锁的实现机制是,如果在表上没有锁(读锁或写锁),则在表上加一个写锁,否则就把写锁请求放在写锁队列中。 读锁的实现机制是,如果在表上没有写锁,把一个读锁定放在它上面,否则就把读锁请求放在读锁定队列中。 当一个锁被释放时,写锁队列中的线程会优先获取写锁,读锁队列中的线程则是后获取锁,这意味着,如果一个表上有许多更新,SELECT语句将一直等待,知道没有新的写请求。

    2020-03-31 15:22:09
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
数据+算法定义新世界 立即下载
袋鼠云基于实时计算的反黄牛算法 立即下载
Alink:基于Apache Flink的算法平台 立即下载