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 TABLE
或ALTER TABLE
语句无法使用默认存储引擎时,会生成警告。如果您想要避免混淆的行为,如果所需的引擎不可用,启用NO_ENGINE_SUBSTITUTION
SQL 模式。如果所需的引擎不可用,这个设置将产生错误,而不是警告,并且不会创建或修改表。请参见Section 7.1.11, “Server SQL Modes”。
MySQL 可能将表的索引和数据存储在一个或多个其他文件中,取决于存储引擎。表和列定义存储在 MySQL 数据字典中。每个存储引擎都创建了它们管理的表所需的任何额外文件。如果表名包含特殊字符,那么表文件名包含了关于那些字符的编码版本,详见第11.2.4节,“标识符映射到文件名”。