Java面试八股之MySQL中的锁及其作用

  1. MySQL中的锁及其作用

MySQL中的锁分类

全局锁(Global Lock):

描述:对整个数据库实例加锁,最常见的是FLUSH TABLES WITH READ LOCK命令,主要用于全库备份等场景,阻止所有对表的写入操作。

作用:确保在备份过程中数据的一致性,防止数据被其他事务修改。

表级锁(Table Lock):

描述:锁定整张表,分为读锁(Shared Lock,即S锁)和写锁(Exclusive Lock,即X锁)。MyISAM和MEMORY存储引擎默认使用表级锁。

作用:

S锁(读锁):多个事务可以同时获得同一张表的S锁,进行并发读取,但不允许任何事务对表进行写操作。

X锁(写锁):一旦事务对表加了X锁,其他事务不能对该表加任何锁(无论是S锁还是X锁),直到该X锁释放。确保写操作期间不会有其他事务干扰。

行级锁(Row Lock):

描述:仅锁定需要操作的数据行,InnoDB存储引擎支持行级锁,包括共享行锁(Shared Row Lock,S锁)和排他行锁(Exclusive Row Lock,X锁)。

作用:

S锁(共享行锁):多个事务可以同时对不同行加S锁,进行并发读取,但不能修改锁定行。

X锁(排他行锁):一个事务对某一行加X锁后,其他事务不能对该行加任何锁,既不能读也不能写,直到该X锁释放。保护单行数据在写操作过程中的完整性。

间隙锁(Gap Lock):

描述:InnoDB在RR隔离级别下,除了锁定索引记录本身,还会对索引记录之间的间隙加锁,防止其他事务在这个间隙插入新行。

作用:防止“幻读”(Phantom Read),确保在事务执行期间,其他事务不能在特定范围内插入新的满足查询条件的记录。

Next-Key Lock:

描述:Next-Key Lock是行锁和间隙锁的组合,不仅锁定一个索引记录,还锁定其左侧的间隙。在RR隔离级别下,InnoDB对范围查询默认使用Next-Key Lock。

作用:结合行锁和间隙锁的优点,不仅保护索引记录本身,还保护其左侧的间隙,进一步防止幻读现象。

意向锁(Intention Locks):

描述:意向锁是表级锁的一种,用于表明事务对表中某一部分(如一行或多行)的加锁意愿。分为意向共享锁(IS锁)和意向排他锁(IX锁)。

作用:

IS锁:事务打算对表中的某个数据行加S锁时,先在表级别加IS锁。

IX锁:事务打算对表中的某个数据行加X锁时,先在表级别加IX锁。

意向锁的存在使得不同粒度的锁可以共存,同时避免了不必要的锁冲突。

 如果大家需要视频版本的讲解,欢迎关注我的B站:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值