文档首页
MySQL 8.4 参考手册
相关文档 下载本手册

MySQL 8.4 参考手册  /  ...  /  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_SIZECREATE TABLESPACE 的四舍五入规则相同,会进行显式四舍五入。

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

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

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

WAIT被解析,但除此之外被忽略。它旨在用于未来的扩展。

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

  • 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 属性值的单个元素。您只能添加或替换属性。