Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  Alternative Storage Engines  /  Setting the Storage Engine

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

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

SET default_storage_engine=NDBCLUSTER;

使用 CREATE TEMPORARY TABLE 创建的临时表的存储引擎可以单独设置,方法是设置 default_tmp_storage_engine,可以在启动时或运行时设置。

要将表从一种存储引擎转换为另一种,可以使用 ALTER TABLE 语句,指定新引擎:

ALTER TABLE t ENGINE = InnoDB;

请参阅 第 15.1.20 节,“CREATE TABLE 语句”第 15.1.9 节,“ALTER TABLE 语句”

如果您尝试使用未编译或已禁用的存储引擎,MySQL 将使用默认存储引擎创建表。例如,在复制设置中,源服务器可能使用 InnoDB 表以确保最大安全性,而副本服务器可能使用其他存储引擎以提高速度,但牺牲了持久性或并发性。

默认情况下,如果 CREATE TABLEALTER TABLE 无法使用默认存储引擎,将生成警告。要防止混淆的、意外的行为,如果所需引擎不可用,可以启用 NO_ENGINE_SUBSTITUTION SQL 模式。如果所需引擎不可用,这个设置将生成错误,而不是警告,并且表将不会被创建或修改。请参阅 第 7.1.11 节,“服务器 SQL 模式”

MySQL 可能将表的索引和数据存储在一个或多个其他文件中,具体取决于存储引擎。表和列定义存储在 MySQL 数据字典中。个别存储引擎创建任何其他文件,以管理它们所管理的表。如果表名包含特殊字符,表文件名将包含这些字符的编码版本,如 第 11.2.4 节,“标识符到文件名的映射” 所述。