当前位置:网站首页>不同的操作加不同的锁详解
不同的操作加不同的锁详解
2022-08-01 19:57:00 【努力学习的狗】
- 事务利用MVCC进行的读取操作称为一致性读(或者快照读)。所有普通的SELECT语句在RC(读已提交),RR(可重复读)隔离级别下都算是快照读,一致性读不会对表中的任何记录进行加锁操作,其他事务可以自由地对表中的记录进行改动
select * from table_name
select * from table_name t1 Inner Join table_name_name t2 on t2.id = t1.id
- 共享锁的锁定读,如果当前事务执行了锁定读,那么就会加上S锁(共享),其它事务可以继续获得这些记录的S锁,但是不能获取到这些记录的X锁,也不能直接改动这些记录。如果其它事务想要获取到对应的X锁,那么就会被阻塞,等到当前事务的S锁释放
select * from table_name LOCK IN SHARE MODE
- 独占锁的锁定读,如果执行了该语句,那么会就给记录加上X锁,其它事务不可以获得这些记录的S锁,也不能获取到这些记录的X锁,不允许直接改动这些记录。如果其它事务想要获取到对应的X锁或者,那么就会被阻塞,等到当前事务提交后将对应的记录X锁释放为止。
SELECT * FROM UPDATE
- DELETE操作:对一条记录执行DELETE操作的过程其实是先在B+树中定位到这条记录的位置,然后获取到这条记录的X锁,然后执行DELETE Mark操作(可以简单理解为获取X锁的锁定读)
- UPDATE操作: 在对一条记录进行UPDATE操作时分为3中情况
- 如果未修改该记录的键值并且被更新的列所占用的存储空间在修改前后未发生变化,则先在B+树中定位到这条记录的位置,然后再获取记录的X锁,最后在原记录的位置进行修改操作。(先定位待修改记录在B+树中的位置,然后再获取记录的X锁的过程,可以看成是一个获取X锁的锁定读)
- 如果未修改该记录的键值并且至少有一个被更新的列占用的存储空间在修改前后发生变化,则先在B+树中定位到这条记录的位置,然后获取记录的X锁,之后将该记录彻底删除掉(把记录彻底移入垃圾链表),最后再插入一条新记录。(先定位到待修改记录再B+树中的位置 ,然后再获取记录的X锁的过程。可以看成一个获取X锁的锁定读,与被彻底删除的记录的关联记录的锁也会被转移到这条新插入的记录上来)
- 如果修改了该记录的键值,则相当于在原记录上执行DELETE操作之后再来一次INSERT操作,加锁操作就需要按照DELETE和INSETR的规则进行
- INSERT操作: 一般情况下,新插入的一条记录受隐式锁保护,不需要再内存中为其生成对应的锁结构。
边栏推荐
- nacos安装与配置
- Oracle排序某个字段, 如果这个varchar2类型的字段有数字也有文字 , 怎么按照数字大小排序?
- 第55章 业务逻辑之订单、支付实体定义
- How to query database configuration parameters in GBase 8c, such as datestyle.What function or syntax to use?
- 17. Load balancing
- 数值矩阵的图形表示
- 二维、三维、四维矩阵每个维度含义解释
- 【Redis】缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存击穿、缓存降级
- 安全作业7.25
- nacos installation and configuration
猜你喜欢
随机推荐
通配符 SSL/TLS 证书
regular expression
openresty 动态黑白名单
我的驾照考试笔记(3)
AcWing 797. 差分
安装win32gui失败,解决问题
The solution to the vtk volume rendering code error (the code can run in vtk7, 8, 9), and the VTK dataset website
如何写一个vim插件?
Combining two ordered arrays
How to query database configuration parameters in GBase 8c, such as datestyle.What function or syntax to use?
锐捷交换机基础配置
ARTS_202207W2
PHP 安全最佳实践
大整数相加,相减,相乘,大整数与普通整数的相乘,相除
Pytorch模型训练实用教程学习笔记:四、优化器与学习率调整
PROE/Croe如何编辑已完成的草图,让其再次进入草绘状态
Win11如何开启剪贴板自动复制?Win11开启剪贴板自动复制的方法
为你的“架构”安排定期体检吧!
百度无人驾驶商业化已“上路”
把 Oracle 数据库从 RAC 集群迁移到单机环境