当前位置:网站首页>【mysql索引实现原理】
【mysql索引实现原理】
2022-08-10 12:09:00 【祁_z】
总结
共享锁大家可能很好理解,就是多个事务只能读数据不能改数据;
排他锁大家的理解可能就有些差别,我当初就犯了一个错误,以为排他锁锁住一行数据后,其他事务就不能读取和修改该行数据,其实不是这样的,
排他锁指的是一个事务在一行数据加上排他锁后,其他事务不能再在其上加其他的锁。
mysql InnoDB引擎默认的修改语句insert,update,delete都会自动给涉及到的数据加上排他锁,
select语句默认不会加任何锁类型,所以排它锁可以通过select查询数据。
1.行锁和表锁
在mysql 的 InnoDB引擎支持行锁,与Oracle不同,mysql的行锁是通过索引加载的,即是行锁是加在索引响应的行上的,要是对应的SQL语句没有走索引,则会全表扫描,
行锁则无法实现,取而代之的是表锁。
表锁:不会出现死锁,发生锁冲突几率高,并发低。
行锁:会出现死锁,发生锁冲突几率低,并发高。
锁冲突:例如说事务A将某几行上锁后,事务B又对其上锁,锁不能共存否则会出现锁冲突。(但是共享锁可以共存,共享锁和排它锁不能共存,排它锁和排他锁也不可以)
死锁:例如说两个事务,事务A锁住了1-5行,同时事务B锁住了6-10行,此时事务A请求锁住6-10行,就会阻塞直到事务B施放6-10行的锁,而随后事务B又请求锁住1-5行,事务B也阻塞直到事务A释放1-5行的锁。死锁发生时,会产生Deadlock错误。
锁是对表操作的,所以自然锁住全表的表锁就不会出现死锁。
2.行锁的类型
行锁分 共享锁 和 排它锁。
共享锁又称:读锁(多个线程都可以读)。当一个事务对某几行上读锁时,允许其他事务对这几行进行读操作,但不允许其进行写操作,也不允许其他事务给这几行上排它锁,但允许上读锁。
排它锁又称:写锁(多个线程都可以读)。当一个事务对某几个上写锁时,不允许其他事务写,但允许读。更不允许其他事务给这几行上任何锁。包括写锁。
边栏推荐
- Nanodlp v2.2/v3.0光固化电路板,机械开关/光电开关/接近开关的接法和系统状态电平设置
- 【论文+代码】PEBAL/Pixel-wise Energy-biased Abstention Learning for Anomaly Segmentation on Complex Urban Driving Scenes(复杂城市驾驶场景异常分割的像素级能量偏置弃权学习)
- 你是怎么知道数据库 Htap 能力强弱的?怎么能看出来
- 查看 CUDA cudnn 版本 & 测试 cuda 和 cudnn 有效性「建议收藏」
- 十八、一起学习Lua 调试(Debug)
- AtCoder Beginner Contest 077 D - Small Multiple
- 娄底干细胞制备实验室建设须知要求
- 虚拟机桥接模式不能上网
- 在web页面播放rtsp流视频(webrtc)
- 数字藏品,“赌”字当头
猜你喜欢
随机推荐
47Haproxy Cluster
How to cultivate the design thinking of ui designers?
2022年8月中国数据库排行榜:openGauss重夺榜眼,PolarDB反超人大金仓
Golang分布式应用之etcd
search--09
“68道 Redis+168道 MySQL”精品面试题(带解析)
Codeforces Round #276 (Div. 1) B. Maximum Value
Chapter9 : De Novo Molecular Design with Chemical Language Models
Is there a problem with the CURRENT_TIMESTAMP(6) function?
Deploy the project halfway through the follow-up
一文详解 implementation api embed
So delicious!Since using this interface artifact, my team efficiency has increased by 60%!
StarRocks on AWS 回顾 | Data Everywhere 系列活动深圳站圆满结束
Proprietary cloud ABC Stack, the real strength!
郭晶晶家的象棋私教,好家伙是个机器人
爱可可AI前沿推介(8.10)
G1和CMS的三色标记法及漏标问题
线代 | 秒杀方法与技巧
解决 idea 单元测试不能使用Scanner
百度用户产品流批一体的实时数仓实践









