首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 分區表管理實戰(一):RANGE/LIST 分區的增刪改與重組

     編輯:MySQL 綜合教學

MySQL 分區表管理實戰(一):RANGE/LIST 分區的增刪改與重組

範例表結構

CREATE TABLE members (
  id INT, fname VARCHAR(25), lname VARCHAR(25), dob DATE
) PARTITION BY RANGE (YEAR(dob)) (
  PARTITION p0 VALUES LESS THAN (1970),
  PARTITION p1 VALUES LESS THAN (1980),
  PARTITION p2 VALUES LESS THAN (1990)
);

一、刪除分區

ALTER TABLE members DROP PARTITION p1;
  • 資料永久遺失:該分區所有資料隨之刪除。
  • SHOW CREATE TABLE 不再顯示被刪分區。
  • RANGE:後續插入落入該範圍的資料自動導向下一分區(p2)。
  • LIST:插入屬於已刪分區值的資料將報錯。

僅清空資料保留分區結構:

ALTER TABLE members TRUNCATE PARTITION p1;

二、新增分區

ALTER TABLE members ADD PARTITION (PARTITION p3 VALUES LESS THAN (2000));
  • 限制:ADD PARTITION 僅能在分區列表末尾新增(本例只能加 1990 年後)。

三、重組分區(核心靈活操作)

使用 REORGANIZE PARTITION 可拆分、合併、調整範圍:

1. 拆分分區

ALTER TABLE members REORGANIZE PARTITION p0 INTO (
  PARTITION s0 VALUES LESS THAN (1960),
  PARTITION s1 VALUES LESS THAN (1970)
);

2. 合併分區

ALTER TABLE members REORGANIZE PARTITION p0,p1,p2,p3 INTO (
  PARTITION m0 VALUES LESS THAN (1980),
  PARTITION m1 VALUES LESS THAN (2000)
);

四、關鍵限制

  1. 不可變更分區類型:若需從 RANGE 改為 HASH,必須 ALTER TABLE ... PARTITION BY HASH(...) PARTITIONS N;(會重建表)。
  2. 語法規則:ALTER TABLE tbl REORGANIZE PARTITION partition_list INTO (partition_definitions);,新定義範圍必須完全覆蓋舊分區範圍。

五、HASH/KEY 分區的調整

不支援 DROP/TRUNCATE/REORGANIZE,僅支援:

-- 合併分區(減少 4 個)
ALTER TABLE clients COALESCE PARTITION 4;

-- 增加分區(增加 6 個)
ALTER TABLE clients ADD PARTITION PARTITIONS 6;
  • COALESCE PARTITION N:將分區數減少 N 個。
  • ADD PARTITION PARTITIONS N:增加 N 個分區。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved