iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >InnoDB怎么使用意向锁
  • 148
分享到

InnoDB怎么使用意向锁

2024-04-02 19:04:59 148人浏览 安东尼
摘要

这篇文章主要为大家展示了“InnoDB怎么使用意向锁”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“InnoDB怎么使用意向锁”这篇文章吧。一,共享/排它锁(Sh

这篇文章主要为大家展示了“InnoDB怎么使用意向”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“InnoDB怎么使用意向锁”这篇文章吧。

一,共享/排它锁(Shared and Exclusive Locks)

在InnoDB里当然也实现了标准的行级锁(row-level locking),共享/排它锁:

(1)事务拿到某一行记录的共享S锁,才可以读取这一行;

(2)事务拿到某一行记录的排它X锁,才可以修改或者删除这一行;

其兼容互斥表如下:

          S          X

S      兼容      互斥

X      互斥      互斥

即:

(1)多个事务可以拿到一把S锁,读读可以并行;

(2)而只有一个事务可以拿到X锁,写写/读写必须互斥;

共享/排它锁的潜在问题是,不能充分的并行,解决思路是数据多版本,具体思路在《 InnoDB并发为何这么高? 》里介绍过,这里不再深入展开。

二,意向锁(Intention Locks)

InnoDB支持多粒度锁(multiple granularity locking),它允许行级锁与表级锁共存,实际应用中,InnoDB使用的是意向锁。

意向锁是指,未来的某个时刻,事务可能要加共享/排它锁了,先提前声明一个意向。

意向锁有这样一些特点:

(1)首先,意向锁,是一个表级别的锁(table-level locking);

(2)意向锁分为:

  • 意向共享锁(intention shared lock, IS),它预示着,事务有意向对表中的某些行加共享S锁

  • 意向排它锁(intention exclusive lock, IX),它预示着,事务有意向对表中的某些行加排它X锁

举个例子:

select ... lock in share mode,要设置IS锁;

select ... for update,要设置IX锁;

(3)意向锁协议(intention locking protocol)并不复杂:

  • 事务要获得某些行的S锁,必须先获得表的IS锁

  • 事务要获得某些行的X锁,必须先获得表的IX锁

(4)由于意向锁仅仅表明意向,它其实是比较弱的锁,意向锁之间并不相互互斥,而是可以并行,其兼容互斥表如下:

          IS          IX

IS      兼容      兼容

IX      兼容      兼容

(5)额,既然意向锁之间都相互兼容,那其意义在哪里呢?它会与共享锁/排它锁互斥,其兼容互斥表如下:

          S          X

IS      兼容      互斥

IX      互斥      互斥

画外音:排它锁是很强的锁,不与其他类型的锁兼容。这也很好理解,修改和删除某一行的时候,必须获得强锁,禁止这一行上的其他并发,以保障数据的一致性。

三,插入意向锁(Insert Intention Locks)

对已有数据行的修改与删除,必须加强互斥锁X锁,那对于数据的插入,是否还需要加这么强的锁,来实施互斥呢?插入意向锁,孕育而生。

插入意向锁,是间隙锁(Gap Locks)的一种(所以,也是实施在索引上的),它是专门针对insert操作的。

画外音:有点尴尬,间隙锁下一篇文章才会介绍,暂且理解为,它是一种实施在索引上,锁定索引某个区间范围的锁。

它的玩法是:

多个事务,在同一个索引,同一个范围区间插入记录时,如果插入的位置不冲突,不会阻塞彼此。

画外音:官网的说法是

Insert Intention Lock signals the intent to insert in such a way that multiple transactions inserting into the same index gap need not wait for each other if they are not inserting at the same position within the gap.

这样,之前挖坑的例子,就能够解答了。

Mysql,InnoDB,RR下:

t(id unique PK, name);

数据表中有数据:

10, shenjian

20, zhangsan

30, lisi

事务A先执行,在10与20两条记录中插入了一行,还未提交:

insert into t values(11, xxx);

事务B后执行,也在10与20两条记录中插入了一行:

insert into t values(12, ooo);

(1)会使用什么锁?

(2)事务B会不会被阻塞呢?

回答:虽然事务隔离级别是RR,虽然是同一个索引,虽然是同一个区间,但插入的记录并不冲突,故这里:

  • 使用的是插入意向锁

  • 并不会阻塞事务B

思路总结

(1)InnoDB使用共享锁,可以提高读读并发;

(2)为了保证数据强一致,InnoDB使用强互斥锁,保证同一行记录修改与删除的串行性;

(3)InnoDB使用插入意向锁,可以提高插入并发;

结尾

假设不是插入并发,而是读写并发,又会是什么样的结果呢?

mysql,InnoDB,默认的隔离级别(RR)。

t(id unique PK, name);

数据表中有数据:

10, shenjian

20, zhangsan

30, lisi

事务A先执行,查询了一些记录,还未提交:

select * from t where id>10; 

事务B后执行,在10与20两条记录中插入了一行:

insert into t values(11, xxx);

以上是“InnoDB怎么使用意向锁”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网数据库频道!

您可能感兴趣的文档:

--结束END--

本文标题: InnoDB怎么使用意向锁

本文链接: https://www.lsjlt.com/news/62807.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • InnoDB怎么使用意向锁
    这篇文章主要为大家展示了“InnoDB怎么使用意向锁”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“InnoDB怎么使用意向锁”这篇文章吧。一,共享/排它锁(Sh...
    99+
    2024-04-02
  • 怎么使用innodb行锁
    本篇内容主要讲解“怎么使用innodb行锁”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用innodb行锁”吧! 三种级别r...
    99+
    2024-04-02
  • MySQL的意向共享锁、意向排它锁和死锁是什么
    本篇内容介绍了“MySQL的意向共享锁、意向排它锁和死锁是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、InnoDB的表级锁在绝大多...
    99+
    2023-07-02
  • innodb行锁怎么实现
    InnoDB行锁是通过锁定索引记录来实现的。具体实现方式如下:1. 当事务A需要对某一行记录加锁时,InnoDB会在该行对应的索引上...
    99+
    2023-09-15
    innodb
  • 怎么理解mysql innodb的行锁
    这篇文章主要讲解了“怎么理解mysql innodb的行锁”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解mysql innodb的行锁”吧! ...
    99+
    2024-04-02
  • Mysql中怎么实现 InnoDB行锁
    Mysql中怎么实现 InnoDB行锁,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Mysql InnoDB行锁实现方式&nb...
    99+
    2024-04-02
  • MySQL中innodb行锁怎么实现
    在MySQL中,InnoDB引擎通过使用锁来实现行级锁。行锁可以通过以下几种方式来实现:1. 自动行锁:InnoDB引擎会根据需要自...
    99+
    2023-10-09
    MySQL
  • sql server中意向锁的作用是什么
    本篇文章给大家分享的是有关sql server中意向锁的作用是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。  sql server中意向...
    99+
    2024-04-02
  • MySQL中的插入意向锁使用案例分析
    这篇文章主要讲解了“MySQL中的插入意向锁使用案例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL中的插入意向锁使用案例分析”吧! ...
    99+
    2023-02-07
    mysql
  • 怎么理解mysql innodb的行锁方式
    本篇内容主要讲解“怎么理解mysql innodb的行锁方式”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么理解mysql innodb的行锁方式”吧! ...
    99+
    2024-04-02
  • MySQL中的插入意向锁是什么
    今天小编给大家分享一下MySQL中的插入意向锁是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解...
    99+
    2023-01-06
    mysql
  • innodb使用的注意事项有哪些
    使用InnoDB引擎时,有一些注意事项需要注意:1. 适当设置InnoDB缓冲池大小:InnoDB使用缓冲池来缓存数据和索引,因此设...
    99+
    2023-09-15
    innodb
  • MYSQL INNODB中通用双向链表怎么实现
    这篇文章给大家分享的是有关MYSQL INNODB中通用双向链表怎么实现的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。源码在Ut0lst.h中注意:这里我将链表中的实际的串联的数...
    99+
    2024-04-02
  • 怎么理解Innodb一致性非锁定读
    这篇文章主要讲解了“怎么理解Innodb一致性非锁定读”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解Innodb一致性非锁定读”吧!一致性非锁定读指...
    99+
    2024-04-02
  • innodb中怎么实现一个存储引擎锁
    本篇文章为大家展示了innodb中怎么实现一个存储引擎锁,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。| innodb存储引擎行锁的算法数据库对锁的使用是...
    99+
    2024-04-02
  • Mysql InnoDB中B+树索引使用注意事项
    目录一、根页面万年不动二、内节点中目录项记录的唯一性三、一个页面至少容纳 2 条记录一、根页面万年不动 在之前的文章里,为了方便理解,都是先画存储用户记录的叶子节点,然后再画出存储目...
    99+
    2024-04-02
  • Javasynchronized偏向锁的概念与使用
    目录一、什么是偏向锁二、偏向锁原理三、偏向锁演示四、偏向锁的处理流程五、偏向锁的撤销六、偏向锁的好处一、什么是偏向锁 HotSpot作者经过研究实践发现,在大多数情况下,锁不仅不存在...
    99+
    2023-02-13
    Java synchronized偏向锁 Java synchronized Java偏向锁
  • Java锁怎么使用
    这篇文章主要介绍了Java锁怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java锁怎么使用文章都会有所收获,下面我们一起来看看吧。乐观锁和悲观锁悲观锁悲观锁对应于生活中悲观的人,悲观的人总是想着事情往...
    99+
    2023-07-02
  • mysql行锁和表锁怎么使用
    MySQL中的行锁和表锁是用来控制并发访问数据库的机制,可以防止多个用户同时修改同一行或同一表的数据,保证数据的一致性和完整性。1....
    99+
    2023-09-11
    mysql
  • mysql中innodb怎么用
    这篇文章主要介绍mysql中innodb怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!下面我们就来看看innodb的用法及形式。1.InnoDB主要特点(1)可以通过自动增长列,方法是auto_incremen...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作