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