ACID_MySQL事务的四大特性详解(MySQL高频面试题)

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: ACID_MySQL事务的四大特性详解(MySQL高频面试题)

ACID事务管理

对于面试官的回答,官方一些:

正式答案:

原子性(Atomicity)


原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。


一致性(Consistency)


事务前后数据的完整性必须保持一致。


隔离性(Isolation)


事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。


持久性(Durability)


持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。


无奈的答案:

如果你真记不住的话,起码你要说一下事务的使用方法:


#开启

BEGIN TRANSACTION

#···中间好多业务逻辑SQL

#成功提交

COMMIT

#失败回滚

ROLLBACK

事务通常是以BEGIN TRANSACTION 开始,以 COMMIT 或 ROLLBACK 结束。COMMIT 表示提交,即提交事务的所有操作。具体的说就是将事务中的所有对数据库的更新写回到磁盘上的物理数据库中,事务正常结束。ROLLBACK表示回滚,即在事务中运行的过程中发生了某种故障,事务不能继续执行,系统将事务中对数据库所有已完成的操作全部撤销,回滚到事务开始时的状态,这里的操作指对数据库的更新操作。


具体解读:

那么,后面咱们深入理解一下:


mysql数据更新的流程(问题的源头)

获取到原始数据,首先在执行引擎汇总查找数据,如果是在内存中则直接返回,否则从磁盘汇总load到内存,然后返回。

更新数据,从执行引擎获取到数据后对其进行修改,然后调用引擎接口把修改后的数据重新写入到引擎中。

重新写入数据,首先把上面的修改后的数据写入到内存,然后写入redo log中这里是二阶段中的一阶段prepare,操作完成后通知执行器完成。

写入bin log日志,这里还是二阶段中的一阶段的另一个分支写binlog日志。

提交事物,最后执行器调用引擎的提交事物接口,这里也就是二阶段中的二阶段,最后把redo log改为commit状态,最终完成。

ACID的实现原理

A(atomicity):使用undo log日志实现,原子性要么都成功,要么都失败,会记录每一次的操作记录的undo log日志,后面发生异常时在从undo log把事物回滚掉。


C(consistency):一致性是根据原子性+隔离性+持久性组合下完成的。


I(isolation):事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务所干扰,多个并发事务之间要相互隔离。【依赖于锁】


D(durability):redo log日志实现


实现原理小节:


事务的原子性是通过undolog来实现的。

事务的持久性性是通过redolog来实现的。

事务的隔离性是通过(读写锁+MVCC)来实现的。

事务的一致性是通过原子性,持久性,隔离性来实现的。

那么,问题又来了。其中undolog与redolog分别是做什么的?啥是MVCC?


undolog:解释在另外一篇文章,挺多的我就不罗列在这了。


undolog回滚日志(MySQL)_红目香薰的博客-CSDN博客


redolog:


https://blog.csdn.net/feng8403000/article/details/125025258


MVCC:


MySQL数据库的核心MVCC,这里有张图能看到整个的过程,方便理解,也包含了各种日志。


image.png


在MySQL数据库中有三个非常重要的日志binlog,undolog,redolog.


还差【binlog】没有说,先说完MVCC:


MVCC(Multi-Version Concurrency Control):多版本并发控制,是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。


MVCC 在 MySQL InnoDB 中的实现主要是为了提高数据库并发性能,用更好的方式去处理读-写冲突,做到即使有读写冲突时,也能做到不加锁,非阻塞并发读。


binlog:


Binlog日志是mysql的二进制日志重要日志,特别是项目中是必须要做好应用的;二进制日志,也就是我们常说的binlog。二进制日志记录了MySQL所有修改数据库的操作,然后以二进制的形式记录日志在日志文件中,其中还包括没调语句所执行的时间和消耗的资源,以及相关的事务信息。


1、主要作用:


以二进制形式记录更改数据库的SQL语句(insert,update,drop,alter等)。


用于MySQL主从复制。


增量数据备份及恢复。


2、配置方式


[mysqld]


server-id = 1 # 后续讲主从的时候解释


log-bin = mysql-bin # binlog日志文件名


log-bin-index = binlog.index # binlog.index日志文件的索引文件


启用该选项数据库性能降低1%,但保障数据库完整性,对于重要数据库值得以性能换完整


最后的总结:

原子性:使用 undo log ,从而达到回滚


持久性:使用 redo log,从而达到故障后恢复


隔离性:使用锁以及MVCC,运用的优化思想有读写分离,读读并行,读写并行


一致性:通过回滚,以及恢复,和在并发环境下的隔离做到一致性。


好好看看,有很大帮助的,出现的概率较大的呢。


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
16天前
|
SQL 关系型数据库 MySQL
轻松入门MySQL:保障数据完整性,MySQL事务在进销存管理系统中的应用(12)
轻松入门MySQL:保障数据完整性,MySQL事务在进销存管理系统中的应用(12)
|
25天前
|
SQL 存储 关系型数据库
对线面试官 - 如何理解MySQL的索引覆盖和索引下推
索引下推是MySQL 5.6引入的优化,允许部分WHERE条件在索引中处理,减少回表次数。例如,对于索引(zipcode, lastname, firstname),查询`WHERE zipcode='95054' AND lastname LIKE '%etrunia%'`时,索引下推先过滤zipcode,然后在索引中应用lastname条件,降低回表需求。索引下推可在EXPLAIN的`Using index condition`中看到。
对线面试官 - 如何理解MySQL的索引覆盖和索引下推
|
9天前
|
存储 SQL 关系型数据库
【MySQL实战笔记】03.事务隔离:为什么你改了我还看不见?-02
【4月更文挑战第7天】数据库通过视图实现事务隔离,不同隔离级别如读未提交、读已提交、可重复读和串行化采用不同策略。以可重复读为例,MySQL使用多版本并发控制(MVCC),每个事务有其独立的视图。回滚日志在无更早视图时被删除。长事务可能导致大量存储占用,应避免。事务启动可显式用`begin`或设置`autocommit=0`,但后者可能意外开启长事务。建议使用`autocommit=1`并显式管理事务,若需减少交互,可使用`commit work and chain`。
28 5
|
21天前
|
关系型数据库 MySQL 测试技术
面试-MySQL的四种事务隔离级别
面试-MySQL的四种事务隔离级别
16 0
|
22天前
|
SQL 关系型数据库 MySQL
MySQL SQL语句面试准备
MySQL SQL语句面试准备
11 0
|
22天前
|
存储 缓存 关系型数据库
MySQL事务的四大特性是如何保证的
在MySQL数据库中还有一种二进制日志,其用来基于时间点的还原及主从复制。从表面上来看其和重做日志非常相似,都是记录了对于数据库操作的日志。但是,从本质上来看有着非常大的不同。
11 1
|
28天前
|
存储 SQL 关系型数据库
索引和事务究竟是何方神圣?那可是面试中的常客!
索引和事务究竟是何方神圣?那可是面试中的常客!
42 1
索引和事务究竟是何方神圣?那可是面试中的常客!
|
11天前
|
关系型数据库 MySQL 数据库
mysql卸载、下载、安装(window版本)
mysql卸载、下载、安装(window版本)
|
1月前
|
关系型数据库 MySQL 数据库连接
关于MySQL-ODBC的zip包安装方法
关于MySQL-ODBC的zip包安装方法
|
29天前
|
关系型数据库 MySQL 数据库
rds安装数据库客户端工具
安装阿里云RDS的数据库客户端涉及在本地安装对应类型(如MySQL、PostgreSQL)的客户端工具。对于MySQL,可选择MySQL Command-Line Client或图形化工具如Navicat,安装后输入RDS实例的连接参数进行连接。对于PostgreSQL,可以使用`psql`命令行工具或图形化客户端如PgAdmin。首先从阿里云控制台获取连接信息,然后按照官方文档安装客户端,最后配置客户端连接以确保遵循安全指引。
82 1