文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  ALTER TABLESPACE 陳述式

15.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']

此陳述式用於 NDBInnoDB 表空間。它可以用於將新的資料檔案新增至 NDB 表空間,或從中刪除資料檔案。它也可以用來重新命名 NDB Cluster 磁碟資料表空間、重新命名 InnoDB 通用表空間、加密 InnoDB 通用表空間,或將 InnoDB undo 表空間標記為活動或不活動。

UNDO 關鍵字與 SET {ACTIVE | INACTIVE} 子句一起使用,以將 InnoDB undo 表空間標記為活動或不活動。如需更多資訊,請參閱第 17.6.3.4 節,"Undo 表空間"

ADD DATAFILE 變體允許您使用 INITIAL_SIZE 子句為 NDB 磁碟資料表空間指定初始大小,其中 size 以位元組為單位測量;預設值為 134217728 (128 MB)。您可以在 size 後面選擇性地加上一個字母,代表數量級,類似於 my.cnf 中使用的字母。通常,這是字母 M (百萬位元組) 或 G (十億位元組) 的其中一個。

在 32 位元系統上,INITIAL_SIZE 支援的最大值為 4294967296 (4 GB)。(Bug #29186)

INITIAL_SIZE 會明確地四捨五入,如同 CREATE TABLESPACE 一樣。

一旦建立資料檔案,其大小就無法變更;但是,您可以使用其他 ALTER TABLESPACE ... ADD DATAFILE 陳述式,將更多資料檔案新增至 NDB 表空間。

ALTER TABLESPACE ... ADD DATAFILEENGINE = NDB 一起使用時,會在每個叢集資料節點上建立資料檔案,但只會在 Information Schema FILES 表格中產生一個資料列。如需更多資訊,請參閱此表格的說明,以及第 25.6.11.1 節「NDB 叢集磁碟資料物件」ADD DATAFILE 不支援 InnoDB 表空間。

使用 ALTER TABLESPACEDROP DATAFILE 會從 NDB 表空間中移除資料檔案 'file_name'。您無法從任何表格正在使用的表空間中刪除資料檔案;換句話說,資料檔案必須是空的 (未使用任何範圍)。請參閱第 25.6.11.1 節「NDB 叢集磁碟資料物件」。此外,任何要刪除的資料檔案都必須先前使用 CREATE TABLESPACEALTER 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 TABLESFLUSH TABLES WITH READ LOCK 對於位於表空間中的表格有效時,無法執行 RENAME TO 作業。

當重新命名表空間時,會對位於一般表空間中的表格取得獨佔的中繼資料鎖定,這會防止並行 DDL。支援並行 DML。

重新命名 InnoDB 一般表空間需要 CREATE TABLESPACE 權限。

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 值可以重複而不會產生錯誤。在這種情況下,會使用最後指定的值。

伺服器不會檢查 ENGINE_ATTRIBUTE 值,也不會在變更表格的儲存引擎時清除這些值。

不允許變更 JSON 屬性值的個別元素。您只能新增或取代屬性。