InnoDB 事务实现原理
InnoDB 是 MySQL 的一个存储引擎,大部分人对 MySQL 都比较熟悉,这里简单介绍一下数据库事务实现的一些基本原理。
在本地事务中,服务和资源在事务的包裹下可以看做是一体的,如下图:
我们的本地事务由资源管理器进行管理:
而事务的 ACID 是通过 InnoDB 日志和锁来保证。
事务的隔离性是通过数据库锁的机制实现的,
持久性通过 Redo Log(重做日志)来实现,原子性和一致性通过 Undo Log 来实现。
Undo Log 的原理很简单,为了满足事务的原子性,在操作任何数据之前,首先将数据备份到一个地方(这个存储数据备份的地方称为 Undo Log)。然后进行数据的修改。
如果出现了错误或者用户执行了 Rollback 语句,系统可以利用 Undo Log 中的备份将数据恢复到事务开始之前的状态。
Redo Log 记录的是新数据的备份。在事务提交前,只要将 Redo Log 持久化即可,不需要将数据持久化。
当系统崩溃时,虽然数据没有持久化,但是 Redo Log 已经持久化。系统可以根据 Redo Log 的内容,将所有数据恢复到*的状态。对具体实现过程有兴趣的同学可以去自行搜索扩展。
INNODB 存储索引和行数据—占内存大,
MyISAM 存储内存地址—占内存小
MyISAM

.frm文件 存储表结构定义相关信息
.MYD文件 储存表的数据行
.MYI文件 存储的是表的索引
data 元素中存储的是行数据的磁盘文件指针
InnoDB

.frm文件 存储表结构定义相关信息
.ibd文件 索引元素,数据元素合并到一起
data 存储的是行数据

