美文网首页
共享锁、排它锁

共享锁、排它锁

作者: 好小葱1 | 来源:发表于2018-10-08 15:52 被阅读8次
  • 共享锁(S):允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁。
  • 排他锁(X):允许获得排他锁的事务更新数据,阻止其他事务取得相同数据集的共享读锁和排他写锁。
    另外,为了允许行锁和表锁共存,实现多粒度锁机制,InnoDB还有两种内部使用的意向锁(Intention Locks),这两种意向锁都是表锁。
  • 意向共享锁(IS):事务打算给数据行加行共享锁,事务在给一个数据行加共享锁前必须先取得该表的IS锁。
  • 意向排他锁(IX):事务打算给数据行加行排他锁,事务在给一个数据行加排他锁前必须先取得该表的IX锁。

行级锁

innodb 行级锁 record-level lock大致有三种:record lock, gap lock and Next-KeyLocks。

  • record lock 锁住某一行记录,简称“行锁”
  • gap lock 锁住某一段范围中的记录
  • next key lock 是前两者效果的叠加。

具体的间隙锁添加方式:https://www.jianshu.com/p/bf862c37c4c9

Innodb 行锁

  • InnoDB行锁是通过给索引上的索引项加锁来实现的,这一点MySQL与Oracle不同,后者是通过在数据块中对相应数据行加锁来实现的。只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁,会把所有扫描过的行都锁定。由于MySQL的行锁是针对索引加的锁,不是针对记录加的锁,所以虽然是访问不同行的记录,但是如果是使用相同的索引键,是会出现锁冲突的。当我们用范围条件而不是相等条件检索数据,并请求共享或排他锁时,InnoDB会给符合条件的已有数据记录的索引项加锁;另外间隙锁也会锁多行,InnoDB除了通过范围条件加锁时使用间隙锁外,如果使用相等条件请求给一个不存在的记录加锁,InnoDB也会使用间隙锁。

相关文章

  • MySQL白菜教程(Level 10 - 共享锁&排他锁)

    共享锁和排它锁(Shared and Exclusive Locks) 并发控制提到共享锁和排它锁就不得不提并发控...

  • 共享锁、排它锁

    共享锁(S):允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁。 排他锁(X):允许获得排他锁的事务更新数...

  • 共享锁,排它锁

    共享锁【S锁】又称读锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不...

  • MySql Innodb 锁

    Innodb 锁的分类 按照锁的级别来分有表锁和行数,按照锁的类型来分,有共享锁和排它锁 表锁 S 共享锁,X 排...

  • 存储引擎

    共享群 排它锁

  • 使用 python 实现简单的共享锁和排他锁!想解我的锁?

    共享锁和排它锁 1、什么是共享锁 共享锁又称为读锁。 从多线程的角度来讲,共享锁允许多个线程同时访问资源,但是对写...

  • Mysql加锁与实践

    1. 锁分类 innodb中的锁分为S锁,即共享锁,另一种为X锁,排它锁,比如: 共享锁(S) select * ...

  • Mysql加锁与实践

    1. 锁分类 innodb中的锁分为S锁,即共享锁,另一种为X锁,排它锁,比如: 共享锁(S) select * ...

  • JDK并发包之重入锁

    锁:对共享数据加锁使其变为临界区。(排它锁)与共享锁 锁有内部锁(synchronized关键字修饰的)与显式锁(...

  • mysql的Innodb锁类型

    共享和排它锁 共享锁(s) 允许持有事务的锁读取一条记录 排它锁(x) 允许持有事务的锁更新或删除一条记录如果一个...

网友评论

      本文标题:共享锁、排它锁

      本文链接:https://www.haomeiwen.com/subject/wapdaftx.html