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 一起使用时,将在每个集群数据节点上创建一个数据文件,但仅在 Information Schema FILES 表中生成一行。有关更多信息,请参阅此表的描述,以及 第 25.6.11.1 节,“NDB 集群磁盘数据对象”。 ADD DATAFILE 不支持 InnoDB 表空间。
使用 DROP DATAFILE 与 ALTER TABLESPACE 会从 NDB 表空间中删除数据文件 'file_name'。您不能从任何表正在使用的表空间中删除数据文件;换句话说,数据文件必须为空(没有使用扩展)。请参阅 第 25.6.11.1 节,“NDB 集群磁盘数据对象”。此外,任何要删除的数据文件都必须以前已使用 CREATE TABLESPACE 或 ALTER 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 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 属性值的单个元素。您只能添加或替换属性。