MySQL 5.5.5起默认引擎为InnoDB,配置核心是按需选择、安全切换及明确影响;通过SHOW ENGINES查看支持状态,建表时显式指定ENGINE最安全,ALTER TABLE可在线切换但大表耗时,全局修改需慎用且注意生效条件。

MySQL 5.5.5 起默认就是 InnoDB,所以“配置不同引擎”本质是:该用哪个、怎么切、切了会怎样——而不是从零开启某个引擎。
查当前支持的引擎和默认值
执行 SHOW ENGINES; 就能看到所有可用引擎及其状态。重点关注三列:Support(YES/NO/DEFAULT),Transactions(是否支持事务),Savepoints(是否支持回滚点)。InnoDB 行如果标着 DEFAULT,说明新表不显式指定引擎时就用它。
常见错误现象:ERROR 1286 (42000): Unknown storage engine 'MyISAM' —— 这不是配置漏了,而是 MySQL 编译时禁用了 MyISAM(极少见),或启用了 --skip-myisam 启动参数。一般不用管,除非你真依赖全文索引且不用事务。
创建表时指定引擎
这是最轻量、最安全的做法,只影响当前表,不影响全局行为。
CREATE TABLE t1 (id INT) ENGINE=InnoDB;CREATE TABLE t2 (id INT) ENGINE=MyISAM;
注意:ENGINE 必须写在语句末尾,大小写不敏感;不写则走当前 default_storage_engine 值。
使用场景:日志类表(高插入、低更新)用 MyISAM 可能略快;订单/账户类必须事务的,强制写 ENGINE=InnoDB,避免误用默认值出问题。
修改已有表的引擎
用 ALTER TABLE ... ENGINE=xxx 可在线切换(MySQL 5.6+ 对 InnoDB 支持 ALGORITHM=INPLACE,但 MyISAM ↔ InnoDB 仍是拷表)。
- 执行
ALTER TABLE orders ENGINE=InnoDB;会锁表、重建整张表、重放所有索引,大表耗时长、磁盘空间翻倍 - 从
InnoDB切到MyISAM会丢失外键、事务能力,且MyISAM不校验数据一致性,万一原表有坏页,切换后可能直接报错 - 全表扫描仍会触发表级锁(哪怕
InnoDB通常行锁),这点常被忽略
建议:线上大表改引擎前,先在从库上试,确认 SHOW CREATE TABLE 输出无异常,再选低峰期操作。
设全局默认引擎(慎用)
两种方式:
- 运行时临时改:
SET GLOBAL default_storage_engine=MyISAM;—— 仅对后续新连接生效,MySQL 重启即失效 - 永久生效:在
my.cnf的[mysqld]段加default-storage-engine=InnoDB(推荐用小写default_storage_engine,兼容性更好),然后重启 MySQL
容易踩的坑:SET GLOBAL 不影响已存在的连接,而 my.cnf 修改后若忘记重启,配置等于没写;另外,某些云数据库(如阿里云 RDS)禁止修改该参数,只能建表时显式指定。
真正关键的不是“怎么配”,而是清楚每张表为什么需要特定引擎——比如 MyISAM 的全文索引在 MySQL 5.6+ 已被 InnoDB 全文索引替代,现在还硬切过去,往往只是历史惯性。


















