mysql数据库相关流程图/原理图( 三 )

  • 在整个数据处理过程中锁定数据 , 事务提交或回滚后才释放锁.
  • 锁粒度
    • 表锁: 开销小 , 加锁快;锁定力度大 , 发生锁冲突概率高 , 并发度最低;不会出现死锁 。
    • 行锁: 开销大 , 加锁慢;会出现死锁;锁定粒度小 , 发生锁冲突的概率低 , 并发度高 。
    • 页锁: 开销和加锁速度介于表锁和行锁之间;会出现死锁;锁定粒度介于表锁和行锁之间 , 并发度一般
    兼容性
    共享锁:
    • 又称读锁(S锁) 。
    • 一个事务获取了共享锁 , 其他事务可以获取共享锁 , 不能获取排他锁 , 其他事务可以进行读操作 , 不能进行写操作 。
    • SELECT ... LOCK IN SHARE MODE 显示加共享锁 。
    排他锁:
    • 又称写锁(X锁) 。
    • 如果事务T对数据A加上排他锁后 , 则其他事务不能再对A加任任何类型的封锁 。获准排他锁的事务既能读数据 , 又能修改数据 。
    • SELECT ... FOR UPDATE 显示添加排他锁 。
    锁模式
    • 记录锁: 在行相应的索引记录上的锁 , 锁定一个行记录
    • gap锁: 是在索引记录间歇上的锁,锁定一个区间
    • next-key锁: 是记录锁和在此索引记录之前的gap上的锁的结合 , 锁定行记录+区间 。
    • 意向锁 是为了支持多种粒度锁同时存在;
    参考与感谢
    • 《MySQL技术内幕》
    • 《高性能MySql》
    • MySQL InnoDB锁机制全面解析分享 segmentfault.com/a/119000001…
    • 数据库两大神器【索引和锁】 juejin.im/post/5b55b8…
    • InnoDB的逻辑存储结构学习 blog.csdn.net/m0_37752084…
    • MySQL索引背后的数据结构及算法原理 blog.codinglabs.org/articles/th…




    推荐阅读