mysql数据库存储引擎有哪些_mysql引擎基础解析

来源:这里教程网 时间:2026-02-28 20:46:32 作者:

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
)。即便如此,也要警惕它的两个硬伤:

服务器异常断电或
kill -9 mysqld
后,
MyISAM
表大概率损坏,需手动
REPAIR TABLE
,期间表不可用;
任何
UPDATE
DELETE
都会锁整张表,哪怕只改一行,其他读请求也得排队——这在现代Web应用中等于自废武功;
SELECT COUNT(*)
快?没错,但它靠的是表头里存的行数快照,一旦发生崩溃或未正常关闭,这个计数就错,且无法自动修复。

怎么查/改表的存储引擎

查单张表用:

SHOW CREATE TABLE tbl_name
,看语句末尾的
ENGINE=InnoDB
;或者直接查
information_schema
SELECT ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA='db_name' AND TABLE_NAME='tbl_name'

建表时指定:
CREATE TABLE t (id INT) ENGINE=InnoDB
修改现有表:
ALTER TABLE t ENGINE=InnoDB
(注意:这是重建表,大表会锁死,务必在低峰期操作);
全局默认引擎可通过配置项
default-storage-engine=InnoDB
设置,但不建议依赖它——显式声明更安全,也避免迁移时因配置遗漏导致意外使用
MyISAM

真正容易被忽略的是:即使你设了默认引擎,如果建表语句里写了

ENGINE=MyISAM
,MySQL 就真的会用 MyISAM——它不会报错,也不会警告。这种隐式切换,在跨环境部署或DBA交接时,常成为线上事故的伏笔。

相关推荐