Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

18.1 设置存储引擎

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

-- 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选项,会使用默认的存储引擎。默认引擎是InnoDB在 MySQL 8.4 中。您可以使用--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;

请参见Section 15.1.20, “CREATE TABLE Statement”Section 15.1.9, “ALTER TABLE Statement”

如果您尝试使用未编译或编译但未激活的存储引擎,MySQL 将使用默认存储引擎创建表。例如,在复制设置中,可能您的源服务器使用InnoDB表以确保安全,但副本服务器使用其他存储引擎以提高速度,但以牺牲可靠性和并发性为代价。

默认情况下,CREATE TABLEALTER TABLE语句无法使用默认存储引擎时,会生成警告。如果您想要避免混淆的行为,如果所需的引擎不可用,启用NO_ENGINE_SUBSTITUTION SQL 模式。如果所需的引擎不可用,这个设置将产生错误,而不是警告,并且不会创建或修改表。请参见Section 7.1.11, “Server SQL Modes”

MySQL 可能将表的索引和数据存储在一个或多个其他文件中,取决于存储引擎。表和列定义存储在 MySQL 数据字典中。每个存储引擎都创建了它们管理的表所需的任何额外文件。如果表名包含特殊字符,那么表文件名包含了关于那些字符的编码版本,详见第11.2.4节,“标识符映射到文件名”