前言:html
存储引擎是数据库的核心,对于 MySQL 来讲,存储引擎是以插件的形式运行的。虽然 MySQL 支持种类繁多的存储引擎,但最经常使用的当属 InnoDB 了,本篇文章将主要介绍 InnoDB 存储引擎相关知识。mysql
1. InnoDB 简介
MySQL 5.5 版本之后,默认存储引擎就是 InnoDB
了。 InnoDB 是一种兼顾了高可靠性和高性能的通用存储引擎。在 MySQL 5.7 中,除非你配置了其余默认存储引擎,不然执行 CREATE TABLE 不指定 ENGINE 的语句将建立一个 InnoDB 表。sql
# 查看MySQL支持的存储引擎 mysql> show engines; +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES | | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | | BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO | | MyISAM | YES | MyISAM storage engine | NO | NO | NO | | CSV | YES | CSV storage engine | NO | NO | NO | | ARCHIVE | YES | Archive storage engine | NO | NO | NO | | PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO | | FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ # 查看默认存储引擎 mysql> show variables like 'default_storage_engine'; +------------------------+--------+ | Variable_name | Value | +------------------------+--------+ | default_storage_engine | InnoDB | +------------------------+--------+
2. InnoDB 优点
InnoDB 之因此如此受宠,主要在于其功能方面的较多优点。数据库
1)支持事务安全
InnoDB 最重要的一点就是支持事务,能够说这是 InnoDB 成为 MySQL 中最流行的存储引擎的一个很是重要的缘由。此外 InnoDB 还实现了 4 种隔离级别(READ UNCOMMITTED,READ COMMITTED,REPEATABLE READ 和 SERIALIZABLE),使得对事务的支持更加灵活。服务器
2)灾难恢复性好并发
InnoDB 经过 commit、rollback、crash-recovery 来保障数据的安全。app
具体来讲,crash-recovery 就是指若是服务器由于硬件或软件的问题而崩溃,无论当时数据是怎样的状态,在重启 MySQL 后,InnoDB 都会自动恢复到发生崩溃以前的状态。ide
3)使用行级锁高并发
InnoDB 改变了 MyISAM 的锁机制,实现了行锁。虽然 InnoDB 的行锁机制是经过索引来完成的,但毕竟在数据库中大部分的 SQL 语句都要使用索引来检索数据。行锁定机制也为 InnoDB 在承受高并发压力的环境下加强了不小的竞争力。
4)实现了缓冲处理
InnoDB 提供了专门的缓冲池,实现了缓冲管理,不只能缓冲索引也能缓冲数据,经常使用的数据能够直接从内存中处理,比从磁盘获取数据处理速度要快。在专用数据库服务器上,一般会将最多80%的物理 memory 分配给缓冲池。
5)支持外键
InnoDB 支持外键约束,检查外键、插入、更新和删除,以确保数据的完整性。存储表中的数据时,每张表的存储都按主键顺序存放,若是没有显式在表定义时指定主键,InnoDB 会为每一行生成一个6字节的 ROWID ,并以此做为主键。
总结:
本篇文章简单介绍了 InnoDB 存储引擎及其优点,想深刻学习 MySQL ,InnoDB 绝对是一块绕不开的重点知识。关于 InnoDB 的内容还有不少,后面有机会的话能够多写写。
参考: