MySQL常见存储引擎有InnoDB、MyISAM、MEMORY、CSV、ARCHIVE、FEDERATED、NDB,其中InnoDB是5.5+默认且唯一推荐主表引擎,因其支持事务、行级锁、崩溃恢复等核心能力。
MySQL里到底有哪些存储引擎可选
执行 SHOW ENGINES\G 就能看到当前MySQL实例支持的所有引擎,常见且实际可用的主要是:InnoDB、MyISAM、MEMORY、CSV、ARCHIVE、FEDERATED(部分版本默认禁用)、NDB(仅集群版)。其中 InnoDB 是 MySQL 5.5+ 的默认引擎,也是生产环境唯一推荐作为主表存储的引擎。
-
MyISAM虽仍被支持,但已不推荐新建表使用——它不支持事务、崩溃后易损坏、写操作会锁整张表; -
MEMORY表数据全在内存,重启即丢,只适合临时中间表或缓存; -
ARCHIVE只能INSERT和SELECT,不能UPDATE/DELETE,专为归档日志设计; -
CSV引擎生成纯文本文件,方便导出到Excel,但无索引、无事务、查询极慢,别当正经表用。
为什么InnoDB是默认,而且几乎该用它
不是因为它“最先进”,而是它解决了绝大多数业务场景下的刚性问题:事务一致性、高并发写入、崩溃自动恢复。比如你执行一条订单插入+库存扣减,必须保证两个操作要么全成功、要么全回滚——只有 InnoDB 能靠 REDO LOG 和 UNDO LOG 做到这点。
- 行级锁 → 多人同时下单不会互相阻塞;
- 聚簇索引 → 主键查询快,且二级索引也带主键值,减少回表;
- 外键约束 → 数据库层强制关联完整性,省得应用层反复校验;
-
innodb_file_per_table=ON(建议开启)→ 每张表一个.ibd文件,便于单独备份、快速TRUNCATE、避免共享表空间膨胀失控。
MyISAM还能用吗?什么情况下真要碰它
极少。除非你确认三点:数据完全静态、绝不允许丢失、且读远多于写(比如某张配置表,每月人工更新一次,其余时间只 SELECT)。即便如此,也要警惕它的两个硬伤: