MySQL 8.0 参考手册  / 第 16 章替代存储引擎  /  15.1 设置存储引擎

15.1 设置存储引擎

创建新表时,可以通过在语句 中添加ENGINE表选项来 指定使用哪个存储引擎:CREATE TABLE

-- ENGINE=INNODB not needed unless you have set a different
-- default storage engine.
CREATE TABLE t1 (i INT) ENGINE = INNODB;
-- Simple table definitions can be switched from one to another.
CREATE TABLE t2 (i INT) ENGINE = CSV;
CREATE TABLE t3 (i INT) ENGINE = MEMORY;

当您省略该ENGINE选项时,将使用默认存储引擎。默认引擎是 InnoDBMySQL 5.6。您可以使用 --default-storage-engine服务器启动选项或通过 在配置文件 中设置该default-storage-engine选项来指定默认引擎。my.cnf

您可以通过设置 default_storage_engine变量为当前会话设置默认存储引擎:

SET default_storage_engine=NDBCLUSTER;

从 MySQL 5.6.3 开始, 可以通过在启动时或运行时设置 ,将TEMPORARY创建的表 的存储引擎与CREATE TEMPORARY TABLE永久表的引擎分开设置 。default_tmp_storage_engine在 MySQL 5.6.3 之前, default_storage_engine为永久和TEMPORARY表设置引擎。

要将表从一个存储引擎转换为另一个存储引擎,请使用 ALTER TABLE指示新引擎的语句:

ALTER TABLE t ENGINE = InnoDB;

请参阅第 13.1.17 节,“CREATE TABLE 语句”第 13.1.7 节,“ALTER TABLE 语句”

如果您尝试使用未编译或已编译但停用的存储引擎,则 MySQL 会使用默认存储引擎创建一个表。例如,在复制设置中,也许您的源服务器使用InnoDB 表来获得最大的安全性,但副本服务器使用替代存储引擎来提高速度,但会牺牲持久性或并发性。

默认情况下,每当 CREATE TABLEALTER TABLE不能使用默认存储引擎时都会生成警告。为防止在所需引擎不可用时发生混乱的意外行为,请启用 NO_ENGINE_SUBSTITUTIONSQL 模式。如果所需的引擎不可用,此设置会产生错误而不是警告,并且不会创建或更改表。请参阅第 5.1.10 节,“服务器 SQL 模式”

对于新表,MySQL 总是创建一个.frm 文件来保存表和列定义。表的索引和数据可能存储在一个或多个其他文件中,具体取决于存储引擎。服务器 .frm在存储引擎级别之上创建文件。各个存储引擎创建它们管理的表所需的任何附加文件。如果表名包含特殊字符,则表文件的名称包含这些字符的编码版本,如 第 9.2.4 节,“标识符到文件名的映射”中所述。