当前位置:网站首页>数据库-当前读与快照读
数据库-当前读与快照读
2022-07-06 06:08:00 【雪峰.贵】
当前读:insert update delete for update
快照读:不加锁的非阻塞读,select。目的是为了提高并发性能
在RC隔离级别下,当前读与快照读结果是一样的。
在RR隔离级别下,当前读与快照读结果有可能是不一样的
例如
事务1 与事务2 都读了一条数据。
select * from user where id =1;
id money
1 200
事务2 修改数据
update user set money = 1000 where id = 1;
commit;
事务1 再读(快照读):
select * from user where id = 1;
id money
1 200
而在执行(当前读) select * from user where id = 1 for update;
id money
1 1000
RR 级别下非阻塞读的实现原理:
数据行实际还有3个字段分别为:
DB_TRX_ID :修改这个数据的事务ID
DB_ROLL_PRT:回滚指针
DB_ROW_ID:隐藏的行ID
事务id=1,把数据从12 改为了32。
- 该行加排他锁
- 复制修改前数据,到undo log里面
- 修改当前行数据,填写事务id,回滚指针
事务id=2,又对此行进行Field3进行修改. - 加排他锁
- 复制修改前数据,到undo
- 修改当前行数据,填写事务id,回滚指针
每做一次修改,都会生成一条UNDO log数据。在事务来快照读数据的时候会通过readView算法,用当前事务id与log的DB_TRX_ID比较来确定是取哪个版本的数据。
边栏推荐
猜你喜欢
随机推荐
误差的基本知识
Company video accelerated playback
The ECU of 21 Audi q5l 45tfsi brushes is upgraded to master special adjustment, and the horsepower is safely and stably increased to 305 horsepower
Commodity price visualization
Amazon Engineer: eight important experiences I learned in my career
Manhattan distance and Manhattan rectangle - print back font matrix
Request forwarding and redirection
Buuctf-[gxyctf2019] no dolls (xiaoyute detailed explanation)
LeetCode 729. 我的日程安排表 I
二维码的前世今生 与 六大测试点梳理
LeetCode 1200. 最小绝对差
H3C V7 switch configuration IRF
[untitled]
LeetCode 731. 我的日程安排表 II
Application of Lie group in gtsam
【Postman】Monitors 监测API可定时周期运行
The difference and usage between continue and break
功能安全之故障(fault),错误(error),失效(failure)
[wechat applet] build a development tool environment
Hongliao Technology: Liu qiangdong's "heavy hand"