MySQL-事务
概念
事务四大特性->acid
- 原子性(Automicity)
事务是一个不可分割的最小操作单元,要么全部执行,要么全部不执行
- 一致性(Consistency)
在事务完成时,数据都必须保持一致状态->转账前后,总金额不变
- 隔离性(Isolation)
数据库系统提供的隔离机制,保证事务在不受外部并发影响的独立环境下运行
- 持久性(Durability)
事务一旦提交或者回滚,它对数据库中数据的改变就是永久性的->持久化到磁盘中
并发事务问题
AB两个事务在同时操作一张表的时候出现的问题
- 更新丢失
版本覆盖
- 脏读
事务A读取到事务B已修改但尚未提交的数据,如果事务B回滚,A读取的数据无效,不符合一致性要求
- 不可重复读
事务A读取到事务B修改的数据
- 幻读
读到了新增的数据
事务隔离级别
读数据一致性及允许的并发副作用隔离级别 | 读数据一致性 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|---|
未提交读 | 最低级别,只能保证不读取物理上损坏的数据 | 是 | 是 | 是 |
已提交读 | 语句级 | 否 | 是 | 是 |
可重复读 | 事务级 | 否 | 否 | 是 |
可序列化 | 最高级别,事务级 | 否 | 否 | 否 |
查看当前数据库的事务隔离级别
show variables like ‘transaction_isolation’;
事务原理
redo log
undo log
用于事务回滚&MVCC
MVCC
基本概念
begin;
update stu set name='u5' where id = 1;
commit;
begin;
SELECT * from stu; -- 快照都 不能读到其他事务提交的数据
SELECT * from stu lock in share mode; -- 当前读,可以读取到其他事务提交的数据
隐藏字段
DB_ROW_ID
只有在没有主键的时候才会存在
验证隐藏字段,查看表的 ibd 文件,使用MySQL自带的 ibd2sdi
undo log 版本链
readview介绍
串行化则是加锁来避免并行访问
fix->max_trx_id 最大事务id+1(预分配事务id)
MVCC-RC级别分析
rc 下事务5 中的两个查询会去创建两个readview
顺着记录->undo log ,根据四条规则结合 ReadView 的实际值,去比对,是否满足,能满足则提取该条undo log 的值,否则顺着找下一条继续比对,如果找不到,则说明没有该值
MVCC-RR级别分析
rr 下事务5 中的两个查询会以第一次的readview为准,后续查询都是基于该readview快照读
原文地址:https://blog.csdn.net/qq_39007838/article/details/145264927
免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!