您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦。
💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精通
❤️ 2. Python爬虫专栏,系统性的学习爬虫的知识点。9.9元买不了吃亏,买不了上当 。python爬虫入门进阶
❤️ 3. Ceph实战,从原理到实战应有尽有。 Ceph实战
❤️ 4. Java高并发编程入门,打卡学习Java高并发。 Java高并发编程入门
😁 5. 社区逛一逛,周周有福利,周周有惊喜。码农飞哥社区,飞跃计划
全网同名【码农飞哥】欢迎关注,个人VX: wei158556
上一篇文章介绍了MySQL中SQL语句的执行流程 【MySQL从入门到精通】【高级篇】(五)MySQL的SQL语句执行流程,在介绍执行流程时提到了InnoDB和MyISAM两种存储引擎。这篇文章将来详细介绍下这两种存储引擎。
为了管理方便,人们把连接管理、查询缓存、语法解析、查询优化这些并不涉及真实数据存储的功能划分为MySQL server的功能,把真实存储数据的功能划分为存储引擎的功能。所以在MySQL Server完成了查询优化后,只需要按照生成的执行计划调用底层存储引擎提供的API,获取到数据后返回给客户端即可。
存储引擎就是指表的类型。其实存储引擎以前叫做表处理器,后来改成存储引擎,它的功能就是接收上层传下来的指令,然后对表中的数据进行提取或写入操作。
| 环境 | 版本 |
|---|---|
| Red Hat | 4.8.5-39 |
| MySQL | 5.7 |
show engines

查询结果显示,MySQL 5.7支持9种存储引擎,分别为 MEMORY、MRG_MYISAM、CSV、FEDEATED、PERFORMANCE_SCHEMA、MYIASM、InnoDB、BLACKHOLE和ARCHIVE。
show variables like '%storage_enginee%'

MySQL 5.5之前默认的存储引擎是MyISAM,在MySQL 5.5之后默认的存储引擎是InnoDB。
SET DEFAULT_STORAGE_ENGINE=MyISAM;
或者修改my.cnf文件:
default-storage-engine=MyISAM
# 重启
systemctl restart mysqld.service
存储引擎是负责对表中的数据进行提取和写入工作的,我们可以对不同的表设置不同的存储引擎。也就是说不同的数据表可以有不同的存储结构,不同的提取和写入方式。
我们之前创建表的语句都没有指定表的存储引擎,那就会使用默认的存储引擎InnoDB。如果我们想显式的指定一下存储引擎,那可以这么写:
CREATE TABLE 表名(
建表语句;
)ENGINE=存储引擎名称;
比如我们想创建一个存储引擎为MyISAM的表可以这么写;
mysql> CREATE TABLE engine_demo_table(name varchar(20)) ENGINE=MyISAM;
Query OK, 0 rows affected (0.01 sec)

默认事务型引擎,它被设计用来处理大量的短期(short-lived)事务。可以确保事务的完整提交(Commit)和回滚(Rollback)。MyISAM提供了大量的特性,包含全文索引、压缩、空间函数(GIS)等,但MyISAM不支持事务,行级锁,外键,有一个毫无疑问的缺陷就是崩溃后无法完全恢复。
5.5之前默认的存储引擎。
| 对比项 | MyISAM | InnoDB |
|---|---|---|
| 外键 | 不支持 | 支持 |
| 事务 | 不支持 | 支持 |
| 行表锁 | 表锁,即使操作一条记录也会锁住整个表,不适合高并发的操作 | 行锁,操作时只锁某一行,不对其他行有影响,适合高并发的操作 |
| 缓存 | 只缓存索引,不缓存真实数据 | 不仅缓存索引还要缓存真实数据,对内存要求较高,而且内存大小对性能有决定性的影响 |
| 自带系统表使用 | Y | N |
| 关注点 | 性能:节省资源,消耗少,简单业务 | 事务:并发写,事务,更大资源 |
| 默认安装 | Y | Y |
| 默认使用 | N | Y |
本文主要介绍MySQL中两种常见的存储引擎,分别是InnoDB和MyISAM,InnoDB作为MySQL5.5之后默认的存储引擎,它的优点是支持事务和行级锁,索引即数据。而MyISAM的优点是访问速度快,索引和真实数据是分开的。