MySQL学习记录—什么是锁

目录

 

悲观锁和乐观锁

悲观锁

乐观锁

MySQL中的锁

按锁的粒度分类

按锁是否可写分类


悲观锁和乐观锁

悲观锁

悲观锁由名字可知,就是把各种东西看的很消极悲观。比如在获取数据处理的时候,担心自己处理的过程中有人会修改这条数据,那么就把数据加锁(表锁、行锁等等)。那么这时其他线程操作数据就会处于阻塞状态,直到该线程操作完毕。

乐观锁

乐观锁就是在对数据库操作过程中,认为外界是不会对数据库操作造成冲突的。那么就不会对数据加任何形式的锁,而是在提交更新的时候,才会对数据进行冲突检测。乐观锁主要是采用了CAS的思想,之后会单独开一篇说这个以及ABBA问题。

MySQL中的锁

InnoDB存储引擎支持行锁和表锁,但其他像MyISAM、MEMORY等只支持表锁,所以以下针对于InnoDB引擎展开。

按锁的粒度分类

  • 表锁,表级锁是对某个表执行DDL语句的同时其他事务执行DML语句会发生阻塞
  • 行锁,行锁是面试中的重头戏。顾名思义就是在某行记录上加锁,行锁又主要有以下三种

Record Locks

对索引项加锁,锁定复合条件的行加锁

Gap Locks

对范围加锁,即索引项的间隙加锁。gap锁主要是用来解决幻读问题的,因为记录还不存在的时候是没有索引记录的,那固然是不能给索引加锁的。

Next-Key Locks

锁定索引项本身和索引范围,该锁其实是前两种锁的合体。它既能保护该条记录,又能阻止别的事务将新记录插入被保护记录前边的间隙

按锁是否可写分类

  • 共享锁(读锁,简称S锁),在事务读取一条记录时,需要先获取该记录的S锁。假设事务T1获取到S锁后,其他事务比如T2也可以获取S锁,但无法获取X锁。
  • 排它锁(写锁,简称X锁),在事务要变更记录的时候,需要先获取该记录的X锁。假设事务T1获取到X锁后,其他事务比如T2只能等T1提交事务释放后才能获取。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值