背景
MySQL数据库可以通过参数sql_mode来控制数据库的行为,本文介绍sql_mode的取值之一:NO_ENGINE_SUBSTITUTION。它的用途是:当CREATE TABLE或ALTER TABLE之类的语句指定一个已禁用或未编译的存储引擎时,控制默认存储引擎的自动替换。
问题现象
为什么想创建一个FEDERATED引擎的表,结果显示却是InnoDB引擎:
CREATE TABLE tb_01 (
id int(11) NOT NULL AUTO_INCREMENT,
age int(11) NOT NULL DEFAULT '0',
name varchar(64) NOT NULL DEFAULT '',
PRIMARY KEY (id)
) ENGINE=FEDERATED;
复制
执行命令后,显示结果如下:
原因分析
导致以上现象发生需要三方面的因素:
- 当前RDS实例不支持FEDERATED引擎,登录数据库执行下面的SQL命令:
SHOW ENGINES;
复制
- sql_mode设置中不含NO_ENGINE_SUBSTITUTION,登录数据库执行下面的SQL命令:
SHOW VARIABLES LIKE 'sql_mode';
复制
- 当前RDS实例的默认存储引擎是InnoDB,登录数据库执行下面的SQL命令:
SHOW VARIABLES LIKE 'default_storage_engine';
复制
说明:当在sql_mode中不设置NO_ENGINE_SUBSTITUTION,且CREATE TABLE中的ENGINE子句指定的存储引擎不被当前数据库实例支持时,MySQL会把表的引擎改为默认存储引擎(InnoDB)。
解决方案
- 方案一:给数据库实例安装FEDERATED引擎
- 方案二:设置sql_mode包含NO_ENGINE_SUBSTITUTION,这样可以给出明确的报错提示避免误解,如下例:
结论建议
从稳定性和性能多方面考虑,针对MySQL数据库中的存储引擎,推荐使用InnoDB引擎,不建议使用其他引擎如:MyISAM、MEMORY等。
最后修改时间:2021-08-12 14:29:14
文章转载自小小亮,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【MySQL 30周年庆】MySQL 8.0 OCP考试限时免费!教你免费领考券
墨天轮小教习
3263次阅读
2025-04-25 18:53:11
MySQL 30 周年庆!MySQL 8.4 认证免费考!这次是认真的。。。
严少安
904次阅读
2025-04-25 15:30:58
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
532次阅读
2025-04-17 17:02:24
MySQL 9.3 正式 GA,我却大失所望,新特性亮点与隐忧并存?
JiekeXu
456次阅读
2025-04-15 23:49:58
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
382次阅读
2025-04-15 14:48:05
MySQL 8.0 OCP 1Z0-908 考试解析指南(二)
JiekeXu
349次阅读
2025-04-30 17:37:37
记录MySQL数据库的一些奇怪的迁移需求!
陈举超
302次阅读
2025-04-15 15:27:53
SQL优化 - explain查看SQL执行计划(下)
金同学
295次阅读
2025-05-06 14:40:00
MySQL 30 周年庆!MySQL 8.4 认证免费考!这次是认真的。。。
数据库运维之道
290次阅读
2025-04-28 11:01:25
MySQL 8.0 OCP 1Z0-908 考试题解析指南
青年数据库学习互助会
286次阅读
2025-04-30 12:17:54