MySQL的锁

本文介绍了MySQL的锁定义及分类,包括悲观锁、乐观锁、独占锁和共享锁。详细阐述了不同类型的锁,如全局锁、表级锁(元数据锁、意向锁)和行级锁(记录锁、间隙锁、临键锁)。讨论了锁的粒度和使用场景,以保证多事务操作中的数据一致性。
摘要由CSDN通过智能技术生成

一、MySQL锁的定义

多事务直接操作同个数据可能会出现数据不一致问题,因此MySQL会对这些数据进行上锁。

二、MySQL锁的分类

1、根据实现区分

(1)悲观锁

若一个事务操作某条记录时,MySQL对它加上了悲观锁,则在该事务处理过程中,只能由该事务持有该记录的锁,其他事务只能排队等待,直到该事务处理完毕。

(2)乐观锁

若某条记录加上了乐观锁,可以有多个事务同时处理该条记录,当出现锁竞争情况时,则会通过比对版本号来判断是否允许操作。乐观锁的实现是通过在行记录上加上个版本号字段,在事务对该行记录进行操作之前,先判断版本号是否一致,是则继续操作,否则不进行操作。

2、根据操作类型区分

(1)独占锁(又叫写锁)

若某个事务持有某条记录的独占锁,则其他事务只能排队等待,直到该事务释放该锁。

InnoDB引擎会在RR级别上,对行数据的修改、删除、插入加上独占锁

开发者可以使用SELECT ... FOR UPDATE语句,它会加一个排他锁(X锁),其他事务不能对已锁定的记录进行更新或加入读锁。

(2)共享锁(又叫读锁)

若MySQL对某条记录加上了读锁,则多个事务可以并发读取该记录数据,但是不可以修改该记录的数据。

在MySQL中,当你执行查询操作时,默认情况下并不会加读锁。但是,如果你需要显式地对查询加锁,可以使用SELECT ... LOCK IN SHARE MODE语句,它会加一个共享锁(S锁),其他事务可以读取但不能修改这些记录,直到事务结束。

注意:共享锁和独占锁是相互阻塞的。独占锁和独占锁是相互阻塞的。共享锁和共享锁是不阻塞的。

3、根据锁粒度区分

(1)全局锁

MySQL对整个数据库进行加锁。

(2)表级锁

a、定义

MySQL对整个进行加锁。当存储引擎需要对行记录加锁,但是存储引擎不

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值