ALTER TABLESPACE 语句

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

MySQL 8.0.14中引入的UNDO关键字与SET {ACTIVE | INACTIVE}子句一起使用,将InnoDB UNDO表空间标记为活动或非活动。

ADD DATAFILE变量使我们能用INITIAL_SIZE子句为NDB磁盘数据表空间指定初始大小,其中大小以字节为单位;默认值为134217728(128mb)。可以选择在大小后面加上表示数量级的一个字母缩写,类似于my.cnf中所用的。 通常,这是字母M(兆字节)或G(千兆字节)之一。

在32位系统上,INITIAL_SIZE支持的最大值为4294967296(4 GB)。

INITIAL_SIZE在CREATE TABLESPACE语句中显式四舍五入。

一旦创建了数据文件,就不能更改其大小;但是,可以使用ALTER TABLESPACE ... ADD DATAFILE语句向NDB表空间添加更多的数据文件。

当ALTER TABLESPACE ... ADD DATAFILE与ENGINE = NDB一起使用,在每个集群数据节点上创建一个数据文件,但在INFORMATION_SCHEMA.FILES表中只生成一行记录。InnoDB表空间不支持ADD DATAFILE。

在ALTER TABLESPACE中使用DROP DATAFILE可以从NDB表空间中删除数据文件'file_name'。不能从任何表正在使用的表空间中删除数据文件;换句话说,数据文件必须为空。此外,任何要删除的数据文件都必须事先使用CREATE TABLESPACE或ALTER TABLESPACE添加到表空间中。InnoDB表空间不支持DROP DATAFILE。

WAIT被解析,但被忽略。它是为将来的扩展而设计的。

指定表空间使用的存储引擎的ENGINE子句已弃用,会在将来的版本中删除。数据字典知道表空间存储引擎,这使得ENGINE子句没用了。如果指定了存储引擎,则它必须与数据字典中定义的表空间存储引擎匹配。与NDB表空间兼容的引擎名的唯一值是NDB和NDBCLUSTER。

RENAME TO操作在自动提交模式下隐式执行,而与自动提交设置无关。

当LOCK TABLES或者FLUSH TABLES WITH READ LOCK对驻留在表空间中的表生效时,无法执行RENAME TO操作。

在重命名表空间时,对驻留在常规表空间中的表采用排他元数据锁,这可以防止并发DDL。支持并发DML。

重命名InnoDB通用表空间需要CREATE TABLESPACE权限。

ENCRYPTION子句为InnoDB通用表空间或mysql系统表空间启用禁用页级数据加密。MySQL 8.0.13引入了对通用表空间的加密支持。MySQL 8.0.16引入了对mysql系统表空间的加密支持。

在启用加密之前,必须安装和配置keyring插件。

从MySQL8.0.16开始,如果启用了table_encryption_privilege_check变量,要更改为与default_table_encryption不同的设置时,需要TABLE_ENCRYPTION_ADMIN权限来才能执行指定ENCRYPTION子句的通用表空间更改。

如果表空间中的任何表属于使用DEFAULT ENCRYPTION='N'定义的模式,则为通用表空间启用加密失败。类似地,如果通用表空间中的任何表属于使用DEFAULT ENCRYPTION='Y'定义的模式,则禁用加密失败。DEFAULT ENCRYPTION模式选项是在MySQL 8.0.16中引入的。

如果在通用表空间上执行的ALTER TABLESPACE语句不包含ENCRYPTION子句,则表空间将保留其当前的加密状态,不管default_table_encryption设置如何。

当通用表空间或mysql系统表空间被加密时,驻留在表空间中的所有表都将被加密。同样,在加密的表空间中创建的表是加密的。

当更改通用表空间或mysql系统表空间的ENCRYPTION属性时,将使用INPLACE算法。INPLACE算法允许在表空间中的表上执行并发DML操作,但是禁止并发DDL操作。

ENGINE_ATTRIBUTE选项(从MySQL 8.0.21起可用)用于指定主存储引擎的表空间属性。此选项保留供将来使用。

允许的值是包含有效JSON文档的字符串文本或空字符串('')。不接受无效的JSON。

ENGINE_ATTRIBUTE值可以重复,不会报错。在这种情况下,使用最后指定的值。

服务器不会检查ENGINE_ATTRIBUTE值,也不会在更改表的存储引擎时清除这些值。

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

ALTER VIEW 语句

此语句更改现存的视图定义。语法与CREATE VIEW的语法类似。此语句需要视图的CREATE VIEW和DROP权限,以及SELECT语句中引用的每个列的某些权限。ALTER VIEW只允许定义者或具有SET_USER_ID权限(或不推荐使用的SUPER权限)的用户使用。

官方文档: https://dev.mysql.com/doc/refman/8.0/en/alter-tablespace.html https://dev.mysql.com/doc/refman/8.0/en/alter-view.html