MySql資料分割槽操作之新增分割槽操作

starkbl發表於2021-09-09

如果想在已經建好的表上進行分割槽,如果使用alter新增分割槽的話,mysql會提示錯誤:

複製程式碼 程式碼如下:
ERROR 1505 Partition management on a not partitioned table is not possible

正確的方法是新建一個具有分割槽的表,結構一致,然後用insert into 分割槽表 select * from 原始表;


測試建立分割槽表檔案


複製程式碼 程式碼如下:
CREATE TABLE tr (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)
);

插入測試資料



複製程式碼 程式碼如下:
INSERT INTO tr VALUES
(1, 'desk organiser', '2003-10-15′),
(2, 'CD player', '1993-11-05′),
(3, 'TV set', '1996-03-10′),
(4, 'bookcase', '1982-01-10′),
(5, 'exercise bike', '2004-05-09′),
(6, 'sofa', '1987-06-05′),
(7, 'popcorn maker', '2001-11-22′),
(8, 'aquarium', '1992-08-04′),
(9, 'study desk', '1984-09-16′),
(10, 'lava lamp', '1998-12-25′);

查詢P2中的資料



複製程式碼 程式碼如下:
select * from tr where purchased between '1995-01-01′ and '2004-12-31′;

如果刪除P2,在刪除P2分割槽的同時,也會將其下的所有資料刪除



複製程式碼 程式碼如下:
alter table tr drop partition p2;
show create table tr;
CREATE TABLE `tr` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(50) DEFAULT NULL,
  `purchased` date DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8

 
再次插入資料時,會將原P2的資料插入至P3中



複製程式碼 程式碼如下:
INSERT INTO tr VALUES (11, 'pencil holder', '1995-07-12′);
ALTER TABLE tr DROP PARTITION p3;
SELECT * FROM tr WHERE purchased  BETWEEN '1995-01-01′ AND '2004-12-31′;

建立一個新的測試表



複製程式碼 程式碼如下:
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 tablename add partition 方式再最後面新增分割槽



複製程式碼 程式碼如下:
ALTER TABLE members ADD PARTITION (PARTITION p3 VALUES LESS THAN (2000));

複製程式碼 程式碼如下:
ALTER TABLE members reorganize partition p0 into (
    partition m0 values less than (1960),
    partition m1 values less than (1970)
);
show create table members;
CREATE TABLE `members` (
  `id` int(11) DEFAULT NULL,
  `fname` varchar(25) DEFAULT NULL,
  `lname` varchar(25) DEFAULT NULL,
  `dob` date DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8

 
使用 REORGANIZE PARTITION進行資料的合併與拆分,資料是沒有丟失的。
(詳細出處參考://)
如果用此方式在之前新增會報錯,只能用另一種合併拆分分割槽的方式操作。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3705/viewspace-2810682/,如需轉載,請註明出處,否則將追究法律責任。

相關文章