MySQL 数据库事务及隔离级别,多版本控制

事务:

事务就是一组原子性的SQL操作,事务内的语句要求全部执行成功,否则全部执行失败。

四大特性:

A:原子性,一个事务是不可分割的最小工作单元,不可能只执行其中的一部分操作。
B:一致性,数据必须确保从一个一致性状态转换到另一个一致性状态。
C:隔离性,一个事务所做的修改在提交前,对其他事务不可见。
D:持久性,一旦事务提交,数据结果会永久保存到数据库中。

隔离级别:

A:read uncommited,

顾名思义就是事务中sql操作,即使没有提交,对其他事务也是可见的。
例如:有张数据表t_sb(id,name),事务1在表中插入一条数据,还未提交,事务2在查询时,便查到了这条数据,这就是脏读。

B:read committed,

一个事务只能看到其他事务提交后的修改,即事务在提交之前,对其他事务不可见。
例如:事务1在表中插入一条数据,并提交了,事务2中是可以查询到的,这是合理的,因为事务1已经提交。但是,如果事务3对此条数据进行了修改,事务2再次查询可能会得到不同于之前查询的结果,因为两次查询结果不一致,导致不可重复读。

C:repeatable read,

可重复读,保证了一个事务中多次读取同样的记录结果是一致的,mysql的默认隔离级别,可以通过var查看。

show variables like '%ISOLATION%'; 

例如:事务1开始查询某条记录,之后事务2中对目标记录进行了修改并提交,而事务1是看不到事务2的提交的,这就确保事务1中多次查询相同的记录返回的结果是相同的。可以自行测试:

事务1:
set autocommit=off;
start TRANSACTION;
select * from user;
update user t set t.name = '小麦2' where t.id=1; 
commit;
事务2:
update user t set t.name = '小麦' where t.id=1; 

事务1只能看到本事务中数据的修改,事务2中的修改对事务1不可见,这就保证了可重复读。但是,理论上可重复读还是无法解决幻行问题,即按某个范围查询时,可能会有新增或删除的数据,然而mysql使用MVCC解决了这一问题。

D:serializable,

最高的隔离级别,强制事务进行串行执行,读取的每一行数据都会进行上锁,可以说最大限度保证数据的一致性,同时,牺牲了高并发(因为锁竞争及等待),实际应用很少使用。

多版本控制(MVCC)

为了提升并发性能,很多数据库都实现了MVCC,可以简单理解为行级锁的变种,版本控制也可以简化理解为乐观锁和悲观锁。通过在每条记录上增加两个列(版本号),一个是创建版本号,另一个是删除版本号,每开启一个事务,版本号都会自增。

所以就会有以下简化规则:
select:只能查找小于等于当前版本号的行记录,且没有删除版本号或删除版本号大于当前版本号的。
insert:为新插入的每一行保存当前事务的创建版本号。
delete:将删除的每一行保存当前事务的删除版本号。
update:新增一条记录并保存版本号,将原记录更新删除版本号,这也就是修改=新增+删除。

事务的作用

事务的存在就是为了保证数据的准确性及安全性,即你在银行的存款不会因为系统原因而丢失。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
课程简介: 课程总计41课时,从什么是事务讲起,直到分布式事务解决方案,很的0基础基础与提升系列课程。对于难以理解的知识点,全部用画图+实战的方式讲解。 第一部分:彻底明白事务的四个特性:原子性、一致性、隔离性、持久性,用场景和事例来讲解。 第二部分:实战讲数据库事务的6中并发异常:回滚丢失、覆盖丢失、脏读、幻读、不可重复读、MVCC精讲。 第三部分:彻底搞清楚4种事务隔离级别:READ_UNCOMMITTED 读未提交隔离级别、READ_COMMITTED 读已提交隔离级别、REPEATABLE_READ 可重复度隔离级别、SERIALIZABLE 序列化隔离级别 第四部分:彻底搞清楚MySQL的各种锁:行锁、表锁、共享锁、排它锁、Next-Key锁、间隙锁、X锁、S锁、IS锁、IX锁、死锁、索引与锁、意向锁等。 第五部分:彻底搞清楚Spring事务的7种传播级别的原理和使用:PROPAGATION_REQUIRED、PROPAGATION_SUPPORTS、PROPAGATION_MANDATORY、PROPAGATION_REQUIRES_NEW、PROPAGATION_NOT_SUPPORTED、PROPAGATION_NEVER、PROPAGATION_NESTED分布式事务的理论基础:RPC定理、BASE理论、XA协议都是什么,原理是什么,有什么关联关系 第六部分:分布式事务的5种解决方案原理和优缺点:2PC两阶段提交法、3PC三阶段提交法、TCC事务补偿、异步确保策略、最大努力通知策略 第七部分:阿里巴巴分布式事务框架Seata:历经多年双十一,微服务分布式事务框架,用一个Nacos+Spring Cloud+Seta+MySql的微服务项目,实战讲解阿里的分布式事务技术,深入理解和学习Seata的AT模式、TCC模式、SAGA模式。 课程资料: 课程附带配套2个项目源码72页高清PDF课件一份阿里巴巴seata-1.1.0源码一份阿里巴巴seata-server安装包一份

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农小麦

一起学习共同进步

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值