MySQL 的锁

MySQL有哪些锁?

  1. 全局锁
  2. 表级锁
    a. 表锁
    b. 元素锁
    c. 意向锁
    d. AUTO-INC 锁
  3. 行级锁
    a. 记录锁
    b. 间隙锁
    c. 临键锁

各种锁的作用与使用场景

全局锁

作用: 就是MySQL 全局上锁,所有的写操作全部阻塞
场景: 全库做逻辑备份的时候使用

表级锁
表锁

作用: 锁定一整个表的数据
场景: 在行锁出现前,一直使用的表锁解决并发读写问题;目前一般比较少用,性能影响比较大.

元素锁

作用: 锁定表的结构
场景: 在要对表的结构进行修改的时候会加

意向锁

作用: 协调行锁与表锁的关系,用于快速判断一个表是否上行锁锁,意向锁会与表级排他锁冲突.
场景:上行锁时候会使用,上表锁的时候先判断是否有意向锁冲突

AUTO-INC 锁

作用: 自增 id 的锁
场景: 定义了自增 id,在写入数据的时候

行级锁
记录锁

作用: 单行数据的锁
场景: 操作某行数据

间隙锁

作用: 某个范围条件的锁,一般用于避免数据幻读
场景: 操作某个范围的数据

临键锁

作用: 记录锁+间隙锁,范围内包含某个值
场景: 操作某个范围的(包含某个值)数据

其他

共享锁

简单理解就是读锁
共享锁可以与共享锁兼容(可同时读)

排他锁

简单理解就是写锁;
排他锁会与排他锁,共享锁都冲突(不可同时读写)

乐观锁
  • 虚拟的锁(并没有加锁),通过版本号解决并发问题,可以在写比较少的情况下,一定程度降低获取释放锁带来的 性能消耗
  • 乐观锁并不是 MySQL 提供的功能,而是手动实现的
  • 实现方案:
    数据增加一个版本号的字段(可以使用自增 或者当前时间戳),每次更新数据都先检查数据更新前后版本号是否一致,如果一致说明数据没有更改,可以直接写,如果不一致就说明数据已经被更改了,需要回滚,重新执行.

缺点: 在写操作比较多的情况下会出现大量的冲突回滚性能不佳.

悲观锁
  • 真正意义上的原子锁(真实的锁)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值