SQL 事务级别 与 支持 图解逻辑记录

本文介绍了SQL标准的四种事务隔离级别:RU、RC、RR和S,重点讲解了MySQL中的RR级别如何避免幻读问题。还讨论了如何在MySQL和Spring中修改事务隔离级别,以及MVCC机制、ReadView、undo log版本链和锁的概念,以增强数据库并发性能。
摘要由CSDN通过智能技术生成

前言

事务这个东西基本都了解 但是很多人不能将整个逻辑串联起来 可能大部分人就知道ACID 但是事务的知识远远不止ACID 怎么能抗住追问 和 完善自己的知识目录 这个还是不错的 建议认真看完

SQL 标准事务隔离级别

SQL 标准中规定了 4 种事务隔离级别,在多事务并发时可以避免一些事务并发问题。

read uncommitted

read uncommitted(读未提交):简称 RU 级别,这个隔离级别是不允许脏写发生的,也就是说不允许两个事务在没提交的情况下去更新同一行数据,却允许读取未提交的数据。但是依旧可能发生脏读、不可重复读、幻读等问题。所以一般情况下都不会使用这个级别。

read committed

read committed(读已提交):简称 RC 级别,这个隔离级别是不允许脏写和脏读的,也就是说不允许读取和修改事务未提交的值。但是依旧可能发生不可重复读和幻读等问题,因为在事务期间内别的事务修改数据并提交后,还是会被这个事务读取到。

repeatable read

repeatable read(可重复读):简称 RR 级别,这个隔离级别是不允许脏写、脏读和不可重复读发生的,也就是说不会在事务内读到被其它事务修改的值,哪怕别的事务已提交。但是依旧有可能发生幻读问题,因为它不保证别的事务新增或删除数据后,这个事务不被影响。

serializable

serializable(串行化):简称 S 级别,这个隔离级别可以避免所有多事务问题,因为这个隔离级别下,所有的事务都将串行化,不会并发执行事务。但是这将会严重降低数据库的性能,所以这个级别一般也不会用。

综上,一般用的最多的就是 RC、RR 级别。并且在 MySQL 中 RR 级别已经可以避免幻读的问题了,所以 MySQL 默认的隔离级别就是 RR 级别。

修改事务隔离级别

MySQL 中默认的 RR 级别,可以避免多事务的问题,所以一般不用修改,但在某些业务场景下也许需要修改隔离级别。

MySQL 命令行

使用命令:SET [GLOBAL|SESSION] TRANSACTION ISOLATION LEVEL {level 级别};

leve 级别:READ UNCOMMITTED,READ COMMITTED,REPEATABLE READ,SERIALIZABLE

Spring 事务注解

也可以使用 Spring 的注解 @Transactional 来修改事务级别, @Transact

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值