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']此语句用于 NDB 和 InnoDB 表空间。它可用于向 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 DATAFILE与ENGINE = NDB一起使用时,将在每个集群数据节点上创建一个数据文件,但仅在信息架构FILES表中生成一行。有关更多信息,请参见此表的说明以及第 25.6.11.1 节“NDB 集群磁盘数据对象”。 ADD DATAFILE不支持InnoDB表空间。
使用DROP DATAFILE与ALTER TABLESPACE一起,将数据文件 'file_name' 从NDB表空间中删除。您无法从任何表正在使用的表空间中删除数据文件;换句话说,数据文件必须为空(没有使用的范围)。参见第 25.6.11.1 节“NDB 集群磁盘数据对象”。此外,要删除的任何数据文件必须以前使用CREATE TABLESPACE或ALTER 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 TABLES或FLUSH 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 属性值的单个元素。您只能添加或替换属性。