mysql中的锁理解

在这里插入图片描述

1.共享锁,排他锁,也叫读锁和写锁

共享锁(S锁)(读锁):事务在读取记录的时候获取共享锁,允许其它事务同时获取共享锁。
排他锁(X锁)(写锁):事务在修改记录的时候获取排他锁,只允许一个事务获取排他锁,其它事务会阻塞等待。
在这里插入图片描述
读锁和写锁是互斥的:
一个事务占用了某条记录的读锁,另一个事务想要获取写锁(可以获取读),需要等待读锁先释放。
一个事务占用了某条记录的写锁,另一个事务想要获取读或者写锁,需要等待写锁先释放。

2.表锁、行锁、页锁

================================================================
表锁:对整张表进行加锁,加锁之后其它事务无法对表进行任何读写操作。
表锁又分为:
1)表级别的S锁、X锁:

LOCK TABLES t READ; # 存储引擎会对表t加表级别的共享锁。共享锁也叫读锁或S锁(Share的缩写)
LOCK TABLES t WRITE; # 存储引擎会对表t加表级别的排他锁。排他锁也叫独占锁、写锁或X锁(exclusive的缩写)

一般不会使用,锁定整张表效率低。
在这里插入图片描述
给表加了读锁之后,自己可以读,自己不能写,而且不能操作其它的表,他人可读,他人写的话得等待。
给表加了写锁之后,自己可以读,自己可以写,而且不能操作其它的表,他人读需要等待,他人写也得等待。

2)意向锁:
意向锁的存在是为了协调行锁和表锁的关系。
假如业务上真用到了表锁,那么表锁和行锁之间肯定会存在冲突,当InnoDB加表锁的时候,如何判断表里面是否有行锁?难道一条条记录遍历去找?效率太低。所以有了意向锁。

意向锁分为:意向共享锁(IS)、意向排他锁(IX)
意向共享锁(IS): 当需要对表中的记录加共享锁的时候,先在表上加个意向共享锁,表示此时表内有共享锁。

例如:

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值