mysql学习-7.独占锁和共享锁

1.独占锁(防止脏写)

独占锁叫做写锁

并发事务修改一行数据时,会先判断这行数据是否有被加锁.

如果未加锁就会添加一个独占锁,包含了自己的trx_id和状态和这行数据关联起来

第二事务过来的时候判断到有锁了,那么他也加一个独占锁在后面排队只是状态是待执行的状态

第一个事务执行完了之后就会检查这行数据是否有其他的锁.他会修改一个锁的状态让他进入执行状态

2.共享锁

共享锁叫做读锁

去读取加了独占锁的值的时候,会自动执行mvcc的规则去undo中读他的快照版本

共享锁是查询的时候可以添加的锁,但共享锁和独占锁是互斥的.

加了独占锁的行是加不了共享锁的,但另一个查询的事务是可以加共享锁的

所以有以下规律

锁类型      独占锁      共享锁

独占锁        互斥          互斥

共享锁        互斥          不互斥

3.sql上加锁的使用方式

共享锁:在查询语句后面加上lock in share mode

独占锁:for update

4.表级的意向锁

表级独占意向锁 LOCK TABLES xxx WRITE

表级共享意向锁 LOCK TABLES xxx READ

表级的意向锁意义不大,可以不用考虑

锁类型      独占锁      意向独占锁      共享锁      意向共享锁

独占锁      互斥          互斥                  互斥         互斥

意向独占锁 互斥          不互斥              互斥          不互斥

共享锁          互斥          互斥                不互斥     不互斥

意向共享锁     互斥      不互斥              不互斥     不互斥

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值