亲测体验关系型数据库事务的隔离级别

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 亲测体验关系型数据库事务的隔离级别

前言 & mysql默认存储引擎的默认隔离级别

从MySQL 5.x开始, 默认的存储引擎已经由MyISAM换为了InnoDB

MySQL存储引擎详解

查看存储引擎信息:

show engines

微信截图_20230626164831.png查看mysql版本:

select version();

返回值:

version()5.7.28

InnoDB默认的隔离级别是RR(Repeatable read, 可重复读),但还可能存在幻读现象;

依据隔离级别逐级升高,mysql提供了如下四种隔离级别:

a) Read uncommitted(未提交读):最低级别,任何情况都无法保证

b) Read committed(已提交读):可避免脏读的发生 `Orancle等多数数据库的默认级别`

c) Repeateable read(可重复读):可避免脏读、不可重复读的发生`mysql的默认级别`

d) Serializable(可串行化):可避免脏读、不可重复读、幻读的发生

show table status from future where name='our_user'

微信截图_20230626164923.png查看&设置 全局or会话 的事务隔离级别

微信截图_20230626165619.png复现’幻读’

副标题: 以InnoDB存储引擎下默认的隔离级别RR(Repeatable read, 可重复读)为例

mysql 幻读的详解、实例及解决办法

幻读会在 RU / RC / RR 级别下出现,SERIALIZABLE 则杜绝了幻读,但 RU / RC 下还会存在脏读,不可重复读,故我们就以 RR 级别来研究幻读,排除其他干扰。

注意:RR 级别下存在幻读的可能,但也是可以使用对记录手动加 X锁 的方法消除幻读。SERIALIZABLE 正是对所有事务都加 X锁 才杜绝了幻读,但很多场景下我们的业务sql并不会存在幻读的风险。SERIALIZABLE 的一刀切虽然事务绝对安全,但性能会有很多不必要的损失。故可以在 RR 下根据业务需求决定是否加锁,存在幻读风险我们加锁,不存在就不加锁,事务安全与性能兼备,这也是 RR 作为mysql默认隔是个事务离级别的原因,所以需要正确的理解幻读。

mysql默认的隔离级别Repeateable read(可重复读),是无法防止”幻读”现象出现的,复现如下:

微信截图_20230626165652.png

执行事务1:

微信截图_20230626165706.png

此时另起一个窗口,执行(干扰)事务2:

微信截图_20230626165725.png

这时在事务1中,继续执行

微信截图_20230626165820.png报错

即事务1查到没有id=5的记录,同时有一个其他事物(事务2)执行对id=5进行了写入.事务1继续进行insert操作,报主键冲突….事务1就很疑惑:不对啊,我刚才查了,明明没有id=5的记录啊..

解决方案: 给事务1的查询语句加排它锁,这样事务2就无法进行写入


相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
1月前
|
SQL 关系型数据库 数据库
事务隔离级别:保障数据库并发事务的一致性与性能
事务隔离级别:保障数据库并发事务的一致性与性能
|
1月前
|
算法 大数据 数据库
数据库事务:保障数据一致性的基石
数据库事务:保障数据一致性的基石
|
4月前
|
存储 SQL 关系型数据库
认识数据库中的事务机制
认识数据库中的事务机制
22 0
|
4月前
|
SQL 存储 关系型数据库
认识数据库中的事务机制(2)
认识数据库中的事务机制(2)。
37 0
|
4月前
|
监控 NoSQL Java
Redis数据库 | 事务、持久化
Redis数据库 | 事务、持久化
28 0
|
1月前
|
SQL 关系型数据库 MySQL
【MySQL 数据库】4、MySQL 事务学习
【MySQL 数据库】4、MySQL 事务学习
44 0
|
3月前
|
SQL Java 关系型数据库
数据库事务
数据库事务
26 0
|
26天前
|
程序员 数据库
数据库事务详解2
数据库事务详解
19 0
|
2月前
|
存储 关系型数据库 MySQL
MySQL 数据库系列(五)-----索引、事务与存储引擎(Linux版)
MySQL 数据库系列(五)-----索引、事务与存储引擎(Linux版)
28 0
|
3月前
|
SQL 关系型数据库 MySQL
Mysql高可用,索引,事务与调优:提高数据库性能的关键技术
在当今互联网时代,高可用性、稳定性和性能是数据库的三大关键要素。本文将深入探讨Mysql高可用、索引、事务和调优等方面的技术,为读者提供实用的解决方案和经验。
24 0

热门文章

最新文章