创建新表时,您可以通过在 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
选项时,将使用默认存储引擎。在 MySQL 9.0 中,默认引擎为 InnoDB
。您可以使用 --default-storage-engine
服务器启动选项或在 my.cnf
配置文件中设置 default-storage-engine
选项来指定默认引擎。
您可以通过设置 default_storage_engine
变量来为当前会话设置默认存储引擎。
SET default_storage_engine=NDBCLUSTER;
使用 CREATE TEMPORARY TABLE
创建的 TEMPORARY
表的存储引擎可以独立于永久表的引擎进行设置,方法是设置 default_tmp_storage_engine
,在启动时或运行时进行设置。
要将表从一个存储引擎转换为另一个存储引擎,请使用指示新引擎的 ALTER TABLE
语句。
ALTER TABLE t ENGINE = InnoDB;
参见 第 15.1.20 节,“CREATE TABLE 语句” 和 第 15.1.9 节,“ALTER TABLE 语句”。
如果尝试使用未编译的存储引擎或编译但停用的存储引擎,MySQL 将使用默认存储引擎创建表。例如,在复制设置中,源服务器可能使用 InnoDB
表以确保最大安全,但副本服务器可能使用其他存储引擎以提高速度,但会牺牲持久性或并发性。
默认情况下,每当 CREATE TABLE
或 ALTER TABLE
无法使用默认存储引擎时,都会生成警告。为了防止在所需的引擎不可用时出现令人困惑的意外行为,请启用 NO_ENGINE_SUBSTITUTION
SQL 模式。如果所需的引擎不可用,此设置将生成错误而不是警告,并且不会创建或更改表。参见 第 7.1.11 节,“服务器 SQL 模式”。
MySQL 可能会将表的索引和数据存储在一个或多个其他文件中,具体取决于存储引擎。表和列定义存储在 MySQL 数据字典中。各个存储引擎会创建其管理的表所需的任何其他文件。如果表名包含特殊字符,则表文件的名称将包含这些字符的编码版本,如 第 11.2.4 节,“标识符到文件名的映射” 中所述。