当前位置:   article > 正文

[mysql必备面试题]-MySQL 锁的类型有哪些呢?

[mysql必备面试题]-MySQL 锁的类型有哪些呢?

说两个维度

  • 共享锁(简称S锁)和排他锁(简称X锁)
    • 读锁是共享的,可以通过lock in share mode实现,这时候只能读不能写。
    • 写锁是排他的,它会阻塞其他的写锁和读锁。从颗粒度来区分,可以分为表锁和行锁两种。
  • 表锁和行锁
    • 表锁会锁定整张表并且阻塞其他用户对该表的所有读写操作,比如alter修改表结构的时候会锁表。
    • 行锁又可以分为乐观锁和悲观锁
      • 悲观锁可以通过for update实现
      • 乐观锁则通过版本号实现。

两个维度结合来看

  • 共享锁(行锁):Shared Locks
    • 读锁(s锁),多个事务对于同一数据可以共享访问,不能操作修改
    • 使用方法:
      • 加锁:SELECT * FROM table WHERE id=1 LOCK IN SHARE MODE
      • 释锁:COMMIT/ROLLBACK
  • 排他锁(行锁):Exclusive Locks
    • 写锁(X锁),互斥锁/独占锁,事务获取了一个数据的X锁,其他事务就不能再获取该行的读锁和写锁(S锁、X锁),只有获取了该排他锁的事务是可以对数据行进行读取和修改
    • 使用方法:
      • DELETE/ UPDATE/ INSERT -- 加锁
      • SELECT * FROM table WHERE ... FOR UPDATE -- 加锁
      • COMMIT/ROLLBACK -- 释锁
  • 意向共享锁(IS)
    • 一个数据行加共享锁前必须先取得该表的IS锁,意向共享锁之间是可以相互兼容的 意向排它锁(IX) 一个数据行加排他锁前必须先取得该表的IX锁,意向排它锁之间是可以相互兼容的 意向锁(IS、IX)是InnoDB引擎操作数据之前自动加的,不需要用户干预; 意义: 当事务操作需要锁表时,只需判断意向锁是否存在,存在时则可快速返回该表不能启用表锁
    • 意向共享锁(IS锁)(表锁):Intention Shared Locks
      • 表示事务准备给数据行加入共享锁,也就是说一个数据行加共享锁 前必须先取得该表的IS锁。
    • 意向排它锁(IX锁)(表锁):Intention Exclusive Locks
      • 表示事务准备给数据行加入排他锁,说明事务在一个数据行加排他 锁前必须先取得该表的IX锁。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/567042
推荐阅读
相关标签
  

闽ICP备14008679号