Mysql 事务上

Mysql 事务学习
https://dev.mysql.com/doc/refman/5.7/en/storage-engines.html



一、什么是数据库事务

事务是数据库管理系统(DBMS)执行过程种的一个逻辑单位,由一个有限的数据库操作序列构成。

二、Mysql特性

在这里插入图片描述
事务四大特性

原子性 	Atomicity 		回滚依赖undo log(撤销日志)
隔离性 	Isolation 		锁+MVCC
持久性 	Durability		事务提交后数据会永久保存,宕机依赖redo log, 双写缓冲
一致性 	Consistency		数据库完整性约束没有被破坏

三、Mysql 事务操作

开启事务

begin,start transaction

结束事务

commit,rollback(连接断开默认是回滚)

其他

一个事务持有的锁释放在事务结束

四、事务并发的三个问题

脏读

在这里插入图片描述

不可重复读

在这里插入图片描述

幻读

在这里插入图片描述

区别

不可重复读包括修改删除,只有插入导致的问题,才是幻读

五、事务隔离级别

隔离级别

在这里插入图片描述
在这里插入图片描述

InnoDB实现

在这里插入图片描述

六、怎么实现隔离

MVCC

建立一个快照,同一个事务无论查多少次都是相同的数据
一个事务能看到的数据版本:
1.第一次查询之前已经提交的事务修改
2.本事务的修改
一个事务不能看到的数据版本:
1.在本事务第一次查询后修改的数据
2.其他事务还没提交的修改

InnoDB

innnodb为每行记录都实现了三个隐藏字段
DB_ROW_ID 行标识
DB_TRX_ID 插入或更新最后一行事务的id

Read View 视图

在这里插入图片描述
0、 从数据的最早版本开始判断(undo log)
1、 数据版本的trx_id = creator_trx_id, 本事务修改, 可以访问
2、 数据版本的trx_id < min_trx_id(未提交事务的最小ID) , 说明这个版本
在生成ReadView已经提交, 可以访问
3、 数据版本的trx_id > max_trx_id(下一个事务ID) , 这个版本是生成
ReadView之后才开启的事务建立的, 不能访问
4、 数据版本的trx_id 在min_trx_id和max_trx_id之间, 看看是否在m_ids中。
如果在, 不可以。 如果不在, 可以。
5、 如果当前版本不可见, 就找undo log链中的下一个版本。

RC 和RR

RR中Read View是事务第一次查询的时候建立的。
RC的Read View是事务每次查询的时候建立的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值