15.1 设置存储引擎

创建新 table 时,可以通过在CREATE TABLE语句中添加ENGINEtable 选项来指定要使用的存储引擎:

-- 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选项时,将使用默认存储引擎。在 MySQL 5.7 中,默认引擎是InnoDB。您可以使用--default-storage-engine服务器启动选项或通过在my.cnf配置文件中设置default-storage-engine选项来指定默认引擎。

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

SET default_storage_engine=NDBCLUSTER;

使用创建临时 table创建的TEMPORARYtable 的存储引擎可以通过在启动时或运行时设置default_tmp_storage_engine来与永久 table 的引擎分开设置。

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

ALTER TABLE t ENGINE = InnoDB;

参见第 13.1.18 节“ CREATE TABLE 语句”第 13.1.8 节“ ALTER TABLE 语句”

如果您尝试使用未编译或已禁用但未编译的存储引擎,则 MySQL 会使用默认存储引擎创建一个 table。例如,在复制设置中,也许您的主服务器使用InnoDBtable 来获得最大的安全性,但是从服务器使用其他存储引擎来提高速度,却牺牲了持久性或并发性。

默认情况下,只要CREATE TABLEALTER TABLE无法使用默认存储引擎,就会生成一条警告。为防止在所需引擎不可用时造成混乱的意外行为,请启用NO_ENGINE_SUBSTITUTION SQL 模式。如果所需的引擎不可用,则此设置将产生错误而不是警告,并且不会创建或更改 table。参见第 5.1.10 节“服务器 SQL 模式”

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