Mysql事务&隔离级别解读和分析

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: Mysql事务&隔离级别解读和分析

事务ACID

事务分为四类:原子性,持久性,一致性,隔离性

A:原子性

所有操作必须成功,否则就被撤销

在mysql日志库中会有一个undo.log(回滚日志)日志,记录了每一步做了什么,如果发生回滚,对于每个insert执行delete,对于每个update 执行相反的update,对于每个delete,执行insert ,重新回到事务执行前的状态


C:一致性

事务执行完毕后,数据库的完整性约束没有被破坏

保持原子性,隔离性,持久性成功执行


I:隔离性

确保不同事务之间不会有影响,并发情况下的事务互不影响。

分为两方面:

写操作对写操作的影响,锁机制保证隔离性

读操作对读操作的影响,MVCC保证隔离性

锁机制:

某个事务要修改数据之前,获得该锁,其他事务要修改该数据需要等该锁释放,从而达到锁机。

锁:行锁和表锁。数据多的时候用表锁


D:持久性

对数据库的改变是永久性的 来源:为了解决mysql宕机,缓存Buffer

Pool中数据写不进去,redo.log被引入来解决这个问题,用来代替宕机的mysql来执行上面的操作,等mysql重启时候恢复,再读取redo.log中相关的操作

在mysql不宕机时,直接把buffer Pool中的修改的加载到mysql,这一步叫做刷脏


事务隔离级别

脏读:

脏读:读到了其他事务未提交的数据,可能会回滚的数据,可能不存在的数据,可能最终不会存在数据库中的数据


可重复读:

在一个事务内,刚开始读到的数据和事务结束前任意时刻读到的同一批数据一致


不可重复读:

在同一事务内,不同时刻读到的同一批数据时不一致的


幻读:

两个事务修改修改同一个数据,一个数据修改后先提交,另一个数据之后提交,对于后者查询的时候会发现某些数据没有起效果,让用户感到迷惑,其实是前者用户修改插进来的


共有四种隔离级别:读未提交,读提交,可重复读,串行化

从左到右,隔离强度主键增强,性能逐渐变差,

e729997b31294feeb9c94a6b155b9552.png


补充:

 读提交可以完美解决读未提交出现的脏读问题
 两个事务进行可重复读操作,开始读了之后,事务发生改动,提交后,剩余的一个事务也会变,但是对于插入操作不会,由此另一个事务会出现幻读,但是Mysql可重读读操作已经解决了幻读问题
 对于串行化,解决了脏读,幻读,可重复读问题,但是效果最差,因为它必须按照顺序执行,后一个事务必须等待前一个事务执行完毕才可以执行
  1. 读未提交和串行化是不用考虑隔离级别的,读未提交不加锁限制,串行化下相当于单线程执行,效果不好,读提交解决了脏读问题,行锁解决了并发更新的问题,Mysql在可重复读级别解决了幻读问题,是通过行锁和间隙锁的组合Next-Key锁实现的。


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
27天前
|
存储 SQL 关系型数据库
MySQL的事务隔离级别
【10月更文挑战第17天】MySQL的事务隔离级别
97 43
|
1月前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1630 14
|
26天前
|
存储 关系型数据库 MySQL
基于案例分析 MySQL 权限认证中的具体优先原则
【10月更文挑战第26天】本文通过具体案例分析了MySQL权限认证中的优先原则,包括全局权限、数据库级别权限和表级别权限的设置与优先级。全局权限优先于数据库级别权限,后者又优先于表级别权限。在权限冲突时,更严格的权限将被优先执行,确保数据库的安全性与资源合理分配。
|
1月前
|
SQL 关系型数据库 MySQL
阿里面试:MYSQL 事务ACID,底层原理是什么? 具体是如何实现的?
尼恩,一位40岁的资深架构师,通过其丰富的经验和深厚的技術功底,为众多读者提供了宝贵的面试指导和技术分享。在他的读者交流群中,许多小伙伴获得了来自一线互联网企业的面试机会,并成功应对了诸如事务ACID特性实现、MVCC等相关面试题。尼恩特别整理了这些常见面试题的系统化解答,形成了《MVCC 学习圣经:一次穿透MYSQL MVCC》PDF文档,旨在帮助大家在面试中展示出扎实的技术功底,提高面试成功率。此外,他还编写了《尼恩Java面试宝典》等资料,涵盖了大量面试题和答案,帮助读者全面提升技术面试的表现。这些资料不仅内容详实,而且持续更新,是求职者备战技术面试的宝贵资源。
阿里面试:MYSQL 事务ACID,底层原理是什么? 具体是如何实现的?
|
1月前
|
存储 关系型数据库 MySQL
RR隔离级别在MySQL中的实现与幻读问题探讨
【10月更文挑战第3天】在数据库管理系统中,事务隔离级别是确保数据一致性和并发性能的关键要素。MySQL作为广泛使用的关系型数据库管理系统,支持多种事务隔离级别,其中可重复读(Repeatable Read,简称RR)是其默认隔离级别。本文将深入探讨RR隔离级别在MySQL中的实现原理,以及RR隔离级别下幻读问题的产生与解决方案。
74 2
|
1月前
|
SQL 关系型数据库 MySQL
MySQL 更新1000万条数据和DDL执行时间分析
MySQL 更新1000万条数据和DDL执行时间分析
102 4
|
1月前
|
SQL 自然语言处理 关系型数据库
Vanna使用ollama分析本地MySQL数据库
这篇文章详细介绍了如何使用Vanna结合Ollama框架来分析本地MySQL数据库,实现自然语言查询功能,包括环境搭建和配置流程。
194 0
|
2月前
|
Oracle NoSQL 关系型数据库
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
395 2
|
2月前
|
关系型数据库 MySQL 数据库
深入理解MySQL数据库隔离级别
深入理解MySQL数据库隔离级别
116 1
|
1月前
|
SQL 关系型数据库 MySQL
MySQL EXPLAIN该如何分析?
本文将详细介绍MySQL中`EXPLAIN`关键字的工作原理及结果字段解析,帮助优化查询性能。`EXPLAIN`可显示查询SQL的执行计划,其结果包括`id`、`select_type`、`table`等字段。通过具体示例和优化建议,帮助你理解和应用`EXPLAIN`,提升数据库查询效率。
80 0