MySQL 的 InnoDB 存储引擎是 MySQL 数据库管理系统中的一个核心组件,它提供了事务安全(ACID 兼容)的表类型,并支持行级锁定和外键约束。InnoDB 是 MySQL 的默认存储引擎(从 MySQL 5.5 版本开始),并且由于其强大的功能和性能,它被广泛用于各种应用程序中。
以下是 InnoDB 存储引擎的一些主要特点:
事务安全(ACID 兼容):
- 原子性(Atomicity):事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
- 一致性(Consistency):事务必须使数据库从一个一致性状态变换到另一个一致性状态。
- 隔离性(Isolation):在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。
- 持久性(Durability):一旦事务完成,无论系统发生什么故障,其结果都是永久性的。
行级锁定(Row-level Locking):InnoDB 支持行级锁定,这允许对表中的单个记录进行锁定,从而提高了并发性能。与 MyISAM 存储引擎的表级锁定相比,InnoDB 的行级锁定允许更高的并发操作。
外键约束(Foreign Key Constraints):InnoDB 支持外键约束,这有助于保持数据的引用完整性。通过外键约束,可以确保一个表中的数据与另一个表中的数据相关联,并且满足特定的引用规则。
崩溃恢复(Crash Recovery):InnoDB 具有一个健壮的崩溃恢复功能,它使用日志文件和双写缓冲区来确保在数据库崩溃后能够恢复数据。
MVCC(多版本并发控制):InnoDB 使用 MVCC 来支持高并发操作。MVCC 允许每个事务看到数据库的一个一致的快照,从而避免了读操作和写操作之间的冲突。
聚簇索引(Clustered Index):InnoDB 的主键索引是聚簇索引,这意味着表中的数据实际上按主键的顺序存储。这种存储方式可以加速基于主键的查询操作。
支持全文索引(Full-text Indexes):从 MySQL 5.6.4 版本开始,InnoDB 存储引擎支持全文索引,这使得在大量文本数据中进行全文搜索变得容易。
支持压缩表(Compressed Tables):InnoDB 支持压缩表,这可以节省磁盘空间并提高 I/O 性能。但是,压缩表可能会增加 CPU 的使用率,因为数据在读取和写入时需要进行压缩和解压缩操作。
在线DDL(Data Definition Language):从 MySQL 5.6 版本开始,InnoDB 支持在线 DDL 操作,这意味着在执行某些 ALTER TABLE 操作时,可以同时对表进行读和写操作。这大大减少了 ALTER TABLE 操作对应用程序的影响。
其他功能:InnoDB 还提供了许多其他功能,如复制支持、分区支持、插入缓冲(Insert Buffer)和自适应哈希索引(Adaptive Hash Index)等。