13-事务的隔离
2022-12-28 15:23:23 0 举报
事务的隔离
作者其他创作
大纲/内容
read committed读已提交RC
roll_pointer
txr_id=32
值C
2.修改数据值B
脏写
undo log版本链
min_trx_idm_ids里最小的值
trx_id在ReadView的m_ids列表内不能查
事务Aid=45min_trx_id=45creator_trx_id=45
MySQL默认
保存一个快照链条,读取到之前的快照值
不允许
txr_id=59
缓存页
creator_trx_id这个事务的id
serializable串行化
每次发起查询都会生成新的ReadView
max_trx_idmysql下一个要生成的事务id最大事务id
修改
txr_id=45
查到原始值
值A
1.txr_id<min_trx_id32<45
txr_id=69
脏读
txr_id=58
原始值
未提交事务下修改的值,一定读取不到
一个事务多次查询一个数据的值,哪怕别的事务修改提交,也没用
不可能两个事务在没提交的情况下去更新同一行数据的值
read committed读已提交
repeatable read可重复读
二者皆为,脑子秀逗配置
事务A(id=50)
read uncommitted读未提交
3.修改trx_id=creator_trx_id=45说明这条数据自己修改的
事务Cid=78
ReadView
不允许多个事务并发执行,只能串行执行
一行数据
txr_id=78
2.txr_id>min_trx_id&&trx_id<max_trx_id59>45&&59<60
txr_id=50
repeatable read可重复读RR
执行事务
事务开启之前,修改这行数据的事务已经提交了,所以可以查到这数据
1.第一次查询值A
事务B修改值为B,事务B的id为58,生成一个undo log记录之前的值,然后roll_pointer指向实际的undo log
3.第二次查询还是A
事务A
事务Bid=59
事务B(id=58)
undo log(空)
值B
4.trx_id>max_trx_id78>60说明是事务A开启后了,有一个事务更新了数据,自己看不到
事务B
Spring中配置使用默认即可,没必要坑自己人
max_trx_id=59
事务B(id=69)
m_ids哪些事务在MySQL里执行还没提交
0 条评论
回复 删除
下一页