• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 设置存储引擎

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

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

    SET default_storage_engine=NDBCLUSTER;
    

    可以通过在启动时或运行时设置,来将TEMPORARY用创建的表的存储引擎与CREATE TEMPORARY TABLE用于永久表的引擎分开设置default_tmp_storage_engine

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

    ALTER TABLE t ENGINE = InnoDB;
    

    请参见“ CREATE TABLE语句”和“ ALTER TABLE语句”。

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

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

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