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 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 DATAFILE
與 ENGINE = NDB
一起使用時,會在每個叢集資料節點上建立資料檔案,但只會在 Information Schema FILES
表格中產生一個資料列。如需更多資訊,請參閱此表格的說明,以及第 25.6.11.1 節「NDB 叢集磁碟資料物件」。ADD DATAFILE
不支援 InnoDB
表空間。
使用 ALTER TABLESPACE
的 DROP DATAFILE
會從 NDB
表空間中移除資料檔案 'file_name
'。您無法從任何表格正在使用的表空間中刪除資料檔案;換句話說,資料檔案必須是空的 (未使用任何範圍)。請參閱第 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。
重新命名 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 屬性值的個別元素。您只能新增或取代屬性。