使用 SQL 陳述式修改分割資料表有多種方式;可以使用 ALTER TABLE
陳述式的分割區擴充功能,來新增、捨棄、重新定義、合併或分割現有的分割區。也有方法可以取得關於分割資料表和分割區的資訊。我們將在後續章節中討論這些主題。
關於以
RANGE
或LIST
分割的資料表中的分割區管理資訊,請參閱 第 26.3.1 節,「範圍和清單分割區的管理」。關於管理
HASH
和KEY
分割區的討論,請參閱 第 26.3.2 節,「雜湊和索引鍵分割區的管理」。關於 MySQL 9.0 中提供的機制,用來取得關於分割資料表和分割區的資訊,請參閱 第 26.3.5 節,「取得關於分割區的資訊」。
關於在分割區上執行維護操作的討論,請參閱 第 26.3.4 節,「分割區維護」。
分割資料表的所有分割區都必須有相同數量的子分割區;一旦資料表建立後,就無法變更子分割區。
若要變更資料表的分割區配置,只需使用具有 partition_options
選項的 ALTER TABLE
陳述式即可,此選項的語法與用於使用 CREATE TABLE
建立分割資料表的語法相同;此選項(也)總是從關鍵字 PARTITION BY
開始。假設以下 CREATE TABLE
陳述式用於建立依範圍分割的資料表
CREATE TABLE trb3 (id INT, name VARCHAR(50), purchased DATE)
PARTITION BY RANGE( YEAR(purchased) ) (
PARTITION p0 VALUES LESS THAN (1990),
PARTITION p1 VALUES LESS THAN (1995),
PARTITION p2 VALUES LESS THAN (2000),
PARTITION p3 VALUES LESS THAN (2005)
);
若要重新分割此資料表,使其依索引鍵分割成兩個分割區,並使用 id
欄位值作為索引鍵的基礎,您可以使用此陳述式
ALTER TABLE trb3 PARTITION BY KEY(id) PARTITIONS 2;
這對資料表結構的影響與捨棄資料表並使用 CREATE TABLE trb3 PARTITION BY KEY(id) PARTITIONS 2;
重新建立它相同。
ALTER TABLE ... ENGINE [=] ...
只會變更資料表使用的儲存引擎,並保持資料表的分割區配置不變。只有在目標儲存引擎提供分割區支援時,陳述式才會成功。您可以使用 ALTER TABLE ... REMOVE PARTITIONING
來移除資料表的分割區;請參閱 第 15.1.9 節,「ALTER TABLE 陳述式」。
在給定的 ALTER TABLE
陳述式中,只能使用單個 PARTITION BY
、ADD PARTITION
、DROP PARTITION
、REORGANIZE PARTITION
或 COALESCE PARTITION
子句。例如,如果您想要捨棄分割區並重新整理資料表的剩餘分割區,則必須在兩個不同的 ALTER TABLE
陳述式中執行此操作(一個使用 DROP PARTITION
,然後第二個使用 REORGANIZE PARTITION
)。
您可以使用 ALTER TABLE ... TRUNCATE PARTITION
從一個或多個選取的分割區中刪除所有列。