美文网首页
mysql ACID特性

mysql ACID特性

作者: John13 | 来源:发表于2020-05-16 10:37 被阅读0次

事务的四大特性:

原子性(Atomicity)
一致性(Consistency)
隔离性(Isolation)
持久性(Durability)

Mysql怎么保证原子性的?

利用Innodb的undo log。 undo log名为回滚日志,是实现原子性的关键,当事务回滚时能够撤销所有已经成功执行的sql语句,他需要记录你要回滚的相应日志信息。 例如

(1)当你delete一条数据的时候,就需要记录这条数据的信息,回滚的时候,insert这条旧数据
(2)当你update一条数据的时候,就需要记录之前的旧值,回滚的时候,根据旧值执行update操作
(3)当年insert一条数据的时候,就需要这条记录的主键,回滚的时候,根据主键执行delete操作
undo log记录了这些回滚需要的信息,当事务执行失败或调用了rollback,导致事务需要回滚,便可以利用undo log中的信息将数据回滚到修改之前的样子。

Mysql怎么保证持久性的?

利用Innodb的redo log。 正如之前说的,Mysql是先把磁盘上的数据加载到内存中,在内存中对数据进行修改,再刷回磁盘上。如果此时突然宕机,内存中的数据就会丢失。 怎么解决这个问题? 简单啊,事务提交前直接把数据写入磁盘就行啊。 这么做有什么问题?

只修改一个页面里的一个字节,就要将整个页面刷入磁盘,太浪费资源了。毕竟一个页面16kb大小,你只改其中一点点东西,就要将16kb的内容刷入磁盘,听着也不合理。
毕竟一个事务里的SQL可能牵涉到多个数据页的修改,而这些数据页可能不是相邻的,也就是属于随机IO。显然操作随机IO,速度会比较慢。
于是,决定采用redo log解决上面的问题。当做数据修改的时候,不仅在内存中操作,还会在redo log中记录这次操作。当事务提交的时候,会将redo log日志进行刷盘(redo log一部分在内存中,一部分在磁盘上)。当数据库宕机重启的时候,会将redo log中的内容恢复到数据库中,再根据undo log和binlog内容决定回滚数据还是提交数据。

采用redo log的好处?

其实好处就是将redo log进行刷盘比对数据页刷盘效率高,具体表现如下:

  • redo log体积小,毕竟只记录了哪一页修改了啥,因此体积小,刷盘快。
  • redo log是一直往末尾进行追加,属于顺序IO。效率显然比随机IO来的快。

Mysql怎么保证隔离性的?

利用的是锁和MVCC机制。

至于MVCC,即多版本并发控制(Multi Version Concurrency Control),一个行记录数据有多个版本对快照数据,这些快照数据在undo log中。 如果一个事务读取的行正在做DELELE或者UPDATE操作,读取操作不会等行上的锁释放,而是读取该行的快照版本。 由于MVCC机制在可重复读(Repeateable Read)和读已提交(Read Commited)的MVCC表现形式不同,就不赘述了。

但是有一点说明一下,在事务隔离级别为读已提交(Read Commited)时,一个事务能够读到另一个事务已经提交的数据,是不满足隔离性的。但是当事务隔离级别为可重复读(Repeateable Read)中,是满足隔离性的。

相关文章

  • Mysql事务

    1) mysql事务的ACID特性 2)MySQL事务隔离级别

  • mysql ACID特性

    事务的四大特性: 原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持久性(...

  • MySQL --- 事务(ACID特性)

    事务是指满足ACID特性的一组操作,可以通过Commit提交一个事务,也可以使用Rollback进行回滚。事务的实...

  • 收集几十位大厂面试者的面试题及个人见解-MySQL模块

    1.1 MySQL事务特性是什么?怎样实现ACID特性? MySQL事务指:一组操作要么同时成功要同时失败。所以事...

  • MYSQL-事务原理

    ACID模型 MYSQL传统关系数据库的ACID模型有以下特性 Atomicity原子性:一个事务中所有操作都必须...

  • MySQL基础 - MySQL查询、事务、ACID特性

    -- 创建SRS数据库 -- 切换到SRS数据库 -- 创建学院表 -- 添加唯一约束 -- 创建学生表 -- 添...

  • 事物

    MySQL本地事物 实验环境:mysql8.0 事物的四大特性:ACID,原子性,一直性,隔离性,持久性 查看默认...

  • spring 事务管理机制 - 基本概念

    事务的四种特性(ACID) 事务具备 ACID 四种特性,ACID 是 Atomic(原子性)、Consisten...

  • Mysql MVCC机制

    概述 事务的ACID特性里面,Mysql通过MVCC机制来保证隔离性,实现可重复读的特性,但是可能会出现幻读的情况...

  • ACID特性

    ACID是DMBS的事务都遵循的四种特性。 Atomicity Either COMMIT or ROLLBACK...

网友评论

      本文标题:mysql ACID特性

      本文链接:https://www.haomeiwen.com/subject/pgjlohtx.html