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