自学内容网 自学内容网

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)!