• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 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:
        [SET {ACTIVE|INACTIVE}]
        [ENCRYPTION [=] {'Y' | 'N'}]
      InnoDB and NDB:
        [ENGINE [=] engine_name]
    

    该语句与NDBInnoDB表空间一起使用。它可用于向NDB表空间添加新数据文件或从表空间删除数据文件。它还可以用于重命名NDB群集磁盘数据表空间,重命名InnoDB常规表空间,加密InnoDB常规表空间或将InnoDB撤消表空间标记为活动或非活动状态。

    UNDO在MySQL 8.0.14中引入的关键字与该SET{ACTIVE|INACTIVE}子句一起使用,可将InnoDB撤消表空间标记为活动或不活动。有关更多信息,请参见“撤消表空间”。

    使用该ADD DATAFILE变体,您可以NDB使用INITIAL_SIZE子句为“磁盘数据”表空间指定初始大小,其中size以字节为单位;默认值为134217728(128 MB)。您可以选择后面size跟一个字母缩写,代表一个数量级,类似于中使用的缩写my.cnf。通常,这是字母M(兆字节)或G(千兆字节)之一。

    在32位系统上,最大支持值为INITIAL_SIZE4294967296(4 GB)。(缺陷号29186)

    INITIAL_SIZE明确地将舍入为CREATE TABLESPACE

    创建数据文件后,无法更改其大小;但是,您可以使用其他ALTER TABLESPACE ... ADD DATAFILE语句将更多数据文件添加到NDB表空间。

    ALTER TABLESPACE ... ADD DATAFILE与一起使用时ENGINE = NDB,将在每个“群集”数据节点上创建一个数据文件,但表中仅生成一行INFORMATION_SCHEMA.FILES。有关更多信息,请参见此表的描述以及“ NDB群集磁盘数据对象”。表空间ADD DATAFILE不支持InnoDB

    DROP DATAFILE与with一起使用可从NDB表空间ALTER TABLESPACE删除数据文件'file_name'。您不能从任何表正在使用的表空间中删除数据文件。换句话说,数据文件必须为空(不使用扩展数据块)。请参见“ NDB群集磁盘数据对象”。此外,必须先使用CREATE TABLESPACE或将要删除的任何数据文件添加到表空间中ALTER TABLESPACE。表空间DROP DATAFILE不支持InnoDB

    WAIT被解析,但被忽略。它打算用于将来的扩展。

    ENGINE子句(指定表空间使用的存储引擎)已被弃用,并将在以后的版本中删除。表空间存储引擎是数据字典已知的,这使该ENGINE子句过时了。如果指定了存储引擎,则它必须与数据字典中定义的表空间存储引擎匹配。engine_nameNDB表空间兼容的唯一值是NDBNDBCLUSTER

    RENAME TOautocommit无论autocommit设置如何,都将在模式下隐式执行操作。

    RENAME TO而不能执行操作LOCK TABLES或者FLUSH TABLES WITH READ LOCK是在驻留在表空间的表的效果。

    重命名表空间时,将对驻留在常规表空间中的表进行独占元数据锁,这可以防止并发DDL。支持并发DML。

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

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

    必须先安装和配置密钥环插件,然后才能启用加密。

    从MySQL 8.0.16开始,如果table_encryption_privilege_check启用了变量,TABLE_ENCRYPTION_ADMIN则需要特权来更改带有ENCRYPTION不同于该子句设置的子句设置的常规表空间default_table_encryption

    如果表空间中的任何表属于使用定义的架构,则对常规表空间启用加密将失败DEFAULT ENCRYPTION='N'。同样,如果通用表空间中的任何表属于定义的架构,则禁用加密都会失败DEFAULT ENCRYPTION='Y'。该DEFAULT ENCRYPTION模式选项在MySQL 8.0.16介绍。

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

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

    INPLACE更改ENCRYPTION通用表空间或mysql系统表空间的属性时使用该算法。该INPLACE算法允许对驻留在表空间中的表进行并发DML。并发DDL被阻止。

    有关更多信息,请参见“ InnoDB静态数据加密”。