InnoDB 是 MySQL 5.5+ 默认存储引擎,建表未指定 ENGINE 时由 default_storage_engine 配置决定;InnoDB 支持行级锁、ACID 事务、外键和崩溃自动恢复,MyISAM 仅支持表级锁、无事务、需手动修复,现代场景下优先选 InnoDB。
MySQL 安装过程本身并不让你选择默认存储引擎;innodb 自 5.5 版本起就是编译内置且默认启用的引擎,安装包不会提供「切换默认引擎」的选项。真正需要你干预的,是建表时的 ENGINE= 显式声明,或通过配置项 default_storage_engine 修改全局默认值。
取决于当前 MySQL 实例的 default_storage_engine 配置,可通过以下命令确认:
SELECT @@default_storage_engine;
常见情况:
innodb(即使你没改过配置)myisam,需检查ENGINE=MyISAM,那不管默认值是什么,这张表一定用 MyISAM这是两者最根本的分水岭,直接影响数据安全和并发行为:
InnoDB 支持行级锁、ACID 事务、外键约束、崩溃后自动恢复(靠 redo log 和 undo log)MyISAM 只支持表级锁,无事务,不支持外键,崩溃后需手动运行 myisamchk 修复,且可能丢数据MyISAM 的表锁会导致大量阻塞;InnoDB 的行锁在多数 OLTP 场景更可靠InnoDB 占用更多内存(缓冲池 innodb_buffer_pool_size)、磁盘空间(聚簇索引 + 事务日志),但换来的是可靠性别迷信「MyISAM 更快」这种过时说法——现代硬件和优化下,多数场景 InnoDB 综合表现更好:
MyISAM 的 COUNT(*) 确实快(它缓存了行数),但这个优势
在有 WHERE 条件时消失TEXT/BLOB 字段?InnoDB 5.7+ 已支持全文索引,MyISAM 的全文索引不支持事务一致性GIS 功能?MySQL 5.7+ 的空间函数只对 InnoDB 表生效mysqldump?InnoDB 支持 --single-transaction 实现热备;MyISAM 只能加锁或停写除非你维护一个只读静态报表库,且明确要求极低内存占用、允许偶尔损坏,否则现在几乎没有理由主动选 MyISAM。