mysql数据库之底层实现原理

52 篇文章 2 订阅
23 篇文章 0 订阅

MySQL里面的事务满足ACID的特性(A:atomicity原子性;C:consistency一致性;I:isolation隔离性;D:durability持久性)。

MySQL事务的原理就是让InnoDB如何保证ACID的特性(InnoDB:MySQL的默认存储引擎)。

首先A表示Atomic,也就是原子性,也就是说,需要保证多个DML操作的原子性,要么都成功,要么都失败,如果失败就意味着要对原本执行成功的数据进行回滚,所以InnoDB里面设计了一个undo log表,在事务执行的过程中,把修改之前的数据快照保存到undo log里面,一旦出现错误,就直接从undo log里面读取数据,进行反向操作就可以了;

其次是C表示consistency,也就是一致性,也就是说,数据的完整性约束不可以被破坏,我认为,这个更多的是依赖业务层面的一些保障,当然,数据库本身也提供了一些,比如说像主键的唯一性约束,字段长度和类型的一些保障等等;

接下来是I表示isolation,也就是事务的隔离性,也就是说多个并行的事务对同一个数据进行操作的时候,如何避免多个事务之间的干扰,导致数据混乱的问题,InnoDB里面提供了4中隔离级别的实现,分别是:

a、RU,也就是未提交读

b、RC,已提交读

c、RR,可重复读

d、Serializable,串行化

InnoDB默认采用的隔离级别是RR,也就是可重复读。然后使用了MVCC机制(即多版本并发控制,主要是为了提高数据库的并发性能)解决了脏读和不可重复读的问题,然后使用了行锁和表锁的方式来解决了幻读的问题;

最后一个是D表示durability,也就是持久性,也就是说,只要事务提交成功,那么对于这个数据的结果的影响一定是永久的,不能因为数据库宕机或者其他原因导致数据变更的失效。

理论上来说,事务提交之后直接把数据放到磁盘里就ok了,但是因为随机磁盘IO的效率确实很低,所以InnoDB里面设计了BufferPool缓冲区来进行优化,也就是说,数据发生变更的时候,先更新内存缓冲区,然后在合适的时间再持久化到磁盘里面,在这个机制里面,有可能出现在持续化过程中如果数据库宕机就导致数据丢失的情况,无法满足持久化,所以在InnoDB里面,引入了Redo log这样一个文件,这个文件存储了数据库变更之后的一个值,当我们通过事务进行数据变更的时候,除了修改内存缓冲区里面的数据以外,还会把本次修改的值追加到Redo log里面,当事务提交的时候,直接把Redo log里面的日志刷新到磁盘里面进行持久化,一旦数据库出现宕机,MySQL重启以后,可以直接用Redo log里面保存的重写日志,读取出来以后再去执行一遍,从而保证数据的持久性。

因此在我看来,事务的持久性原理核心本质就是如何去保证事务的ACID特性,而在undo log里面用到了MVCC、行锁、表锁、undo log以及redo log等等的机制去保证这样的特性。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MySQL是一种关系型数据库管理系统,其底层实现原理涉及多个方面,包括数据存储、查询优化、并发控制和事务处理等。 1. 数据存储:MySQL使用文件系统来管理数据的物理存储。每个数据库表都对应一个或多个文件,其中包含数据行、索引和其他元数据。MySQL支持不同的存储引擎,如InnoDB、MyISAM等,每个存储引擎都有不同的数据存储方式和特性。 2. 查询优化:MySQL使用查询优化器来确定最佳执行计划。查询优化器分析查询语句,并根据表的统计信息、索引等因素选择最佳的索引和执行策略。通过合理的索引设计和查询编写,可以提高查询性能。 3. 并发控制:MySQL使用锁机制来实现并发控制,保证多个用户同时访问数据库时数据的一致性。MySQL支持不同级别的锁,如表级锁、行级锁等。通过合理地选择锁级别和事务隔离级别,可以平衡并发性能和数据一致性要求。 4. 事务处理:MySQL支持事务处理,保证数据的完整性和一致性。事务是由一系列操作组成的逻辑工作单元,可以通过ACID属性来保证数据的一致性。MySQL使用日志来记录事务的操作,以便在发生故障时进行数据恢复。 总的来说,MySQL底层实现原理涉及数据存储、查询优化、并发控制和事务处理等方面,通过这些机制来保证数据的安全性、一致性和性能。不同的存储引擎和配置选项可以对MySQL的性能和功能进行调优和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小格子衬衫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值