如何基于现有表创建MEMORY引擎的临时表
问题解答
这个操作可行,但你的语法写法不符合规范,因此触发了语法错误。
错误原因
CREATE TABLE ... LIKE ...语句会完整复制原表的所有结构属性(包括存储引擎、字符集、索引、约束等),MySQL语法不允许在LIKE子句后直接追加ENGINE参数来覆盖原表引擎。
正确实现方式
有两种常用方案可以达成需求:
- 先复制表结构,再修改存储引擎(会保留原表的索引、约束等所有结构属性)
CREATE TABLE t LIKE r; ALTER TABLE t ENGINE = MEMORY;
- 直接创建指定引擎的表并复制列结构(注意:这种方式不会复制原表的索引、约束,需要手动添加)
CREATE TABLE t ENGINE = MEMORY SELECT * FROM r WHERE 1=0;
如果需要创建临时表,记得加上TEMPORARY关键字:
-- 方案1:临时表+修改引擎 CREATE TEMPORARY TABLE t LIKE r; ALTER TABLE t ENGINE = MEMORY; -- 方案2:直接创建临时内存表 CREATE TEMPORARY TABLE t ENGINE = MEMORY SELECT * FROM r WHERE 1=0;
额外注意:MEMORY引擎有自身特性限制,比如不支持TEXT、BLOB类型,不支持事务与外键等,如果原表r包含这些不兼容的结构,修改引擎会执行失败,需要提前确认原表结构是否适配MEMORY引擎。
内容的提问来源于stack exchange,提问作者theking2
相关产品推荐
相关产品推荐

