### 13.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']
```

此语句与`NDB`和`InnoDB`表空间。它可以用于向数据库添加新数据文件，或从数据库中删除数据文件`NDB`表空间。它还可以用于重命名NDB群集磁盘数据表空间，重命名`InnoDB`常规表空间，加密`InnoDB`常规表空间，或标记`InnoDB`将表空间撤消为活动或非活动。

这个`打开`MySQL 8.0.14中引入的关键字与`设置{ACTIVE | INACTIVE}`标记一个`InnoDB`将表空间撤消为活动或非活动。有关更多信息，请参阅[第15.6.3.4节，“撤消表空间”](innodb-undo-tablespaces.html).

这个`添加数据文件`变量使您可以指定一个变量的初始大小`NDB`使用`初始尺寸`条款，在哪里*`大小`*以字节为单位；默认值为134217728（128MB）。你可以选择跟随*`大小`*用一个字母的缩写表示一个数量级，类似于`我的cnf`.一般来说，这是一封信`M`（兆字节）或`G`（千兆字节）。

在32位系统上，支持的最大值为`初始尺寸`是4294967296（4 GB）。（臭虫#29186）

`初始尺寸`显式地四舍五入[`创建表空间`](create-tablespace.html).

一旦创建了数据文件，就不能更改其大小；但是，您可以使用其他方法向NDB表空间添加更多数据文件`改变表空间。。。添加数据文件`声明。

什么时候`改变表空间。。。添加数据文件`与…连用`引擎=NDB`，在每个群集数据节点上创建一个数据文件，但在[`信息模式。文件夹`](information-schema-files-table.html)桌子请参见此表的说明，以及[第23.6.10.1节，“NDB群集磁盘数据对象”](mysql-cluster-disk-data-objects.html)，以获取更多信息。`添加数据文件`不支持`InnoDB`表空间。

使用`删除数据文件`具有[`改变表空间`](alter-tablespace.html)删除数据文件的*`文件名`*“来自NDB表空间。不能从任何表正在使用的表空间中删除数据文件；换句话说，数据文件必须为空（不使用扩展数据块）。看见[第23.6.10.1节，“NDB群集磁盘数据对象”](mysql-cluster-disk-data-objects.html)。此外，任何要删除的数据文件都必须在之前使用[`创建表空间`](create-tablespace.html)或[`改变表空间`](alter-tablespace.html). `删除数据文件`不支持`InnoDB`表空间。

`等待`被解析，但在其他方面被忽略。这是为了将来的扩展。

这个`发动机`子句指定表空间使用的存储引擎，不推荐使用；预计它将在未来的版本中删除。数据字典知道表空间存储引擎，因此`发动机`条款过时了。如果指定了存储引擎，则它必须与数据字典中定义的表空间存储引擎匹配。唯一的价值观*`引擎名称`*兼容[`NDB`](mysql-cluster.html)表空间是`NDB`和`NDBCLUSTER`.

`改名为`操作是在中隐式执行的[`自动提交`](server-system-variables.html#sysvar_autocommit)模式，无论[`自动提交`](server-system-variables.html#sysvar_autocommit)背景

A.`改名为`操作无法在运行时执行[`锁桌`](lock-tables.html)或[`用读锁冲洗桌子`](flush.html)对驻留在表空间中的表有效。

独家[元数据锁](glossary.html#glos_metadata_lock)在重命名表空间时，对驻留在常规表空间中的表执行DDL，这会防止并发DDL。支持并发DML。

这个[`创建表空间`](privileges-provided.html#priv_create-tablespace)需要特权才能重命名`InnoDB`通用表空间。

这个`自动扩展大小`选项定义了`InnoDB`当表空间满时扩展表空间的大小。在MySQL 8.0.23中引入。该设置必须是4MB的倍数。默认设置为0，这会根据隐式默认行为扩展表空间。有关更多信息，请参阅[第15.6.3.9节，“表空间自动扩展”\_“尺寸配置”](innodb-tablespace-autoextend-size.html).

这个`加密`子句启用或禁用对`InnoDB`通用表空间或`mysql`系统表空间。MySQL 8.0.13中引入了对通用表空间的加密支持。对`mysql`系统表空间是在MySQL 8.0.16中引入的。

在启用加密之前，必须安装并配置密钥环插件。

从 MySQL 8.0.16 开始，如果[`table_encryption_privilege_check`](server-system-variables.html#sysvar_table_encryption_privilege_check)变量启用时，[`TABLE_ENCRYPTION_ADMIN`](privileges-provided.html#priv_table-encryption-admin)需要特权才能使用`加密`条款设置不同于[`default_table_encryption`](server-system-variables.html#sysvar_default_table_encryption)环境。

如果表空间中的任何表属于使用定义的模式，则为通用表空间启用加密失败[`默认加密='N'`](create-database.html).同样，如果通用表空间中的任何表属于使用定义的模式，则禁用加密会失败[`默认加密='Y'`](create-database.html).这[`默认加密`](create-database.html)在 MySQL 8.0.16 中引入了 schema 选项。

如果[`改变表空间`](alter-tablespace.html)在通用表空间上执行的语句不包括`加密`子句，表空间保持其当前的加密状态，而不管[`default_table_encryption`](server-system-variables.html#sysvar_default_table_encryption)环境。

当一个通用表空间或`mysql`系统表空间被加密，驻留在表空间中的所有表都被加密。同样，在加密表空间中创建的表也会被加密。

这`到位`算法在改变时使用`加密`通用表空间的属性或`mysql`系统表空间。这`到位`算法允许对驻留在表空间中的表进行并发 DML。并发 DDL 被阻止。

有关详细信息，请参阅[第 15.13 节，“InnoDB 静态数据加密”](innodb-data-encryption.html).

这`引擎属性`选项（自 MySQL 8.0.21 起可用）用于指定主存储引擎的表空间属性。该选项保留供将来使用。

允许的值是包含有效值的字符串文字`JSON`文档或空字符串 ('')。无效的`JSON`被拒绝。

```
ALTER TABLESPACE ts1 ENGINE_ATTRIBUTE='{"key":"value"}';
```

`引擎属性`值可以重复而不会出错。在这种情况下，使用最后指定的值。

`引擎属性`服务器不会检查值，也不会在更改表的存储引擎时清除它们。

不允许更改 JSON 属性值的单个元素。您只能添加或替换一个属性。
