文档主页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF(US Ltr) - 40.0Mb
PDF(A4) - 40.1Mb
手册页(TGZ) - 258.2Kb
手册页(Zip) - 365.3Kb
Info(Gzip) - 4.0Mb
Info(Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  ALTER TABLESPACE 语句

15.1.10 ALTER TABLESPACE 语句

ALTER [UNDO] TABLESPACE tablespace_name
  NDB only:
    {ADD | DROP} DATAFILE 'file_name'
    [INITIAL_SIZE [=] size]
    [WAIT]
  InnoDB and NDB:
    [RENAME TO tablespace_name]
  InnoDB only:
    [AUTOEXTEND_SIZE [=] 'value']
    [SET {ACTIVE | INACTIVE}]
    [ENCRYPTION [=] {'Y' | 'N'}]
  InnoDB and NDB:
    [ENGINE [=] engine_name]
  Reserved for future use:
    [ENGINE_ATTRIBUTE [=] 'string']

此语句用于 NDBInnoDB 表空间。它可用于向 NDB 表空间添加新的数据文件,或从 NDB 表空间删除数据文件。它还可用于重命名 NDB 集群磁盘数据表空间,重命名 InnoDB 通用表空间,加密 InnoDB 通用表空间,或将 InnoDB 撤消表空间标记为活动或非活动。

UNDO 关键字用于 SET {ACTIVE | INACTIVE} 子句,以将 InnoDB 撤消表空间标记为活动或非活动。有关更多信息,请参见 第 17.6.3.4 节,“撤消表空间”

ADD DATAFILE 变体使您能够使用 INITIAL_SIZE 子句指定 NDB 磁盘数据表空间的初始大小,其中 size 以字节为单位;默认值为 134217728(128 MB)。您可选择在 size 之后添加大小级的单字母缩写,类似于在 my.cnf 中使用的那些缩写。通常,它为字母 M(兆字节)或 G(千兆字节)之一。

在 32 位系统上,INITIAL_SIZE 支持的最大值为 4294967296(4 GB)。(错误 #29186)

INITIAL_SIZE 会像 CREATE TABLESPACE 一样,明确地进行舍入。

数据文件创建后,其大小无法更改;但是,可以使用其他 ALTER TABLESPACE ... ADD DATAFILE 语句向 NDB 表空间添加更多数据文件。

ALTER TABLESPACE ... ADD DATAFILEENGINE = NDB 一起使用时,将在每个集群数据节点上创建一个数据文件,但仅在 Information Schema FILES 表中生成一行。有关更多信息,请参阅此表的描述,以及 第 25.6.11.1 节,“NDB 集群磁盘数据对象”ADD DATAFILE 不支持 InnoDB 表空间。

使用 DROP DATAFILEALTER TABLESPACE 会从 NDB 表空间中删除数据文件 'file_name'。您不能从任何表正在使用的表空间中删除数据文件;换句话说,数据文件必须为空(没有使用扩展)。请参阅 第 25.6.11.1 节,“NDB 集群磁盘数据对象”。此外,任何要删除的数据文件都必须以前已使用 CREATE TABLESPACEALTER TABLESPACE 添加到表空间。 DROP DATAFILE 不支持 InnoDB 表空间。

WAIT 会被解析,但会被忽略。它用于将来的扩展。

ENGINE 子句用于指定表空间使用的存储引擎,已弃用,因为表空间存储引擎由数据字典识别,这使得 ENGINE 子句已过时。在 MySQL 9.0 中,它仅在以下两种情况下受支持

  • ALTER TABLESPACE tablespace_name ADD DATAFILE 'file_name'
        ENGINE={NDB|NDBCLUSTER}
  • ALTER UNDO TABLESPACE tablespace_name SET {ACTIVE|INACTIVE}
        ENGINE=INNODB

您应该期待在将来版本的 MySQL 中从这些语句中最终删除 ENGINE

RENAME TO 操作会隐式地在自动提交模式下执行,而与 autocommit 的值无关。

当对位于表空间中的表生效 LOCK TABLESFLUSH TABLES WITH READ LOCK 时,无法执行 RENAME TO 操作。

当重命名表空间时,会在位于一般表空间中的表上获取排他性 元数据锁,这会阻止并发 DDL。支持并发 DML。

需要 CREATE TABLESPACE 权限才能重命名 InnoDB 一般表空间。

AUTOEXTEND_SIZE 选项定义了当 InnoDB 表空间已满时扩展其大小的增量。该设置必须是 4MB 的倍数。默认设置是 0,这会导致表空间根据隐式默认行为扩展。有关更多信息,请参阅 第 17.6.3.9 节,“表空间 AUTOEXTEND_SIZE 配置”

ENCRYPTION 子句启用或禁用 InnoDB 一般表空间或 mysql 系统表空间的页面级数据加密。

必须安装并配置密钥环插件才能启用加密。

如果 table_encryption_privilege_check 变量已启用,则需要 TABLE_ENCRYPTION_ADMIN 权限才能使用与 default_table_encryption 设置不同的 ENCRYPTION 子句设置来更改一般表空间。

如果表空间中的任何表都属于使用 DEFAULT ENCRYPTION='N' 定义的模式,则为一般表空间启用加密将失败。同样,如果一般表空间中的任何表都属于使用 DEFAULT ENCRYPTION='Y' 定义的模式,则禁用加密将失败。

如果在一般表空间上执行的 ALTER TABLESPACE 语句不包含 ENCRYPTION 子句,则无论 default_table_encryption 设置如何,表空间都会保留其当前加密状态。

当一般表空间或 mysql 系统表空间被加密时,位于表空间中的所有表都被加密。同样,在加密表空间中创建的表也会被加密。

更改一般表空间或 mysql 系统表空间的 ENCRYPTION 属性时,会使用 INPLACE 算法。 INPLACE 算法允许对位于表空间中的表进行并发 DML。并发 DDL 被阻止。

有关更多信息,请参阅 第 17.13 节,“InnoDB 静态数据加密”

ENGINE_ATTRIBUTE 选项用于指定主存储引擎的表空间属性。该选项为将来的使用保留。

分配给此选项的值是一个包含有效 JSON 文档的字符串文字或一个空字符串('')。无效 JSON 会被拒绝。

ALTER TABLESPACE ts1 ENGINE_ATTRIBUTE='{"key":"value"}';

ENGINE_ATTRIBUTE 值可以重复,不会出错。在这种情况下,将使用最后指定的 value。

服务器不会检查 ENGINE_ATTRIBUTE 值,也不会在更改表的存储引擎时清除它们。

不允许更改 JSON 属性值的单个元素。您只能添加或替换属性。