mysql存储引擎是负责将sql操作转换为磁盘读写的底层组件;innodb因行级锁、mvcc、崩溃恢复和外键支持成为事实标准,建表应显式指定engine=innodb以防环境差异。
MySQL 存储引擎到底是什么?
它不是“数据库类型”,也不是“配置选项”,而是 MySQL 真正干活的底层组件——负责把你的 INSERT/UPDATE/SELECT 转成磁盘读写操作。你可以理解为:同一个表结构(比如 t_user),用 InnoDB 存,数据和索引一起写进 .ibd 文件;换成 MyISAM,就拆成 .frm+.MYD+.MYI 三个文件,连锁机制、崩溃恢复、事务支持都完全不同。
怎么查当前支持哪些引擎?别只看默认值
执行 SHOW ENGINES \G 是最直接的方式,但要注意输出里 Support 字段的值:
-
DEFAULT:当前 MySQL 实例默认引擎(5.7+ 基本都是InnoDB) -
YES:编译时启用,且运行时可用(比如MEMORY可能被禁用) -
NO:要么没编译进去,要么配置里显式禁用了(如skip-innodb) -
DISABLED:服务启动时加载失败(常见于插件路径错误或依赖缺失)
别只信 SHOW VARIABLES LIKE '%storage_engine%' ——它只告诉你“默认设成啥”,不反映实际可用性。
建表时不指定 ENGINE=?后果很现实
如果你写 CREATE TABLE t_log (id INT) DEFAULT CHARSET=utf8; 却漏了 ENGINE=,MySQL 就按 default_storage_engine 配置走。问题在于: