MySql数据分区操作,新增分区

        如果想在已经建好的表上进行分区,如果使用alter添加分区的话,mysql会提示错误: 
        ERROR 1505 <HY000> Partition management on a not partitioned table is not possible 
        正确的方法是新建一个具有分区的表,结构一致,然后用insert into 分区表 select * from 原始表

        测试创建分区表文件

Mysql代码  收藏代码

  1. CREATE TABLE tr (id INT, name VARCHAR(50), purchased DATE)  

  2. PARTITION BY RANGE(YEAR(purchased))  

  3. (  

  4.     PARTITION p0 VALUES LESS THAN (1990),  

  5.     PARTITION p1 VALUES LESS THAN (1995),  

  6.     PARTITION p2 VALUES LESS THAN (2000),  

  7.     PARTITION p3 VALUES LESS THAN (2005)  

  8. );  


        插入测试数据

Mysql代码  收藏代码

  1. INSERT INTO tr VALUES  

  2. (1'desk organiser''2003-10-15'),  

  3. (2'CD player''1993-11-05'),  

  4. (3'TV set''1996-03-10'),  

  5. (4'bookcase''1982-01-10'),  

  6. (5'exercise bike''2004-05-09'),  

  7. (6'sofa''1987-06-05'),  

  8. (7'popcorn maker''2001-11-22'),  

  9. (8'aquarium''1992-08-04'),  

  10. (9'study desk''1984-09-16'),  

  11. (10'lava lamp''1998-12-25');  



        查询P2中的数据

Mysql代码  收藏代码

  1. select * from tr where purchased between '1995-01-01' and '2004-12-31';  



       如果删除P2,在删除P2分区的同时,也会将其下的所有数据删除

Mysql代码  收藏代码

  1. alter table tr drop partition p2;  

  2.   

  3. show create table tr;  

  4.   

  5. CREATE TABLE `tr` (  

  6.   `id` int(11) DEFAULT NULL,  

  7.   `name` varchar(50) DEFAULT NULL,  

  8.   `purchased` date DEFAULT NULL  

  9. ) ENGINE=MyISAM DEFAULT CHARSET=utf8  

  10. /*!50100 PARTITION BY RANGE (YEAR(purchased))  

  11. (PARTITION p0 VALUES LESS THAN (1990) ENGINE = MyISAM,  

  12.  PARTITION p1 VALUES LESS THAN (1995) ENGINE = MyISAM,  

  13.  PARTITION p3 VALUES LESS THAN (2005) ENGINE = MyISAM) */  




        再次插入数据时,会将原P2的数据插入至P3中 

Mysql代码  收藏代码

  1. INSERT INTO tr VALUES (11'pencil holder''1995-07-12');  

  2.   

  3. ALTER TABLE tr DROP PARTITION p3;  

  4.   

  5. SELECT * FROM tr WHERE purchased  BETWEEN '1995-01-01' AND '2004-12-31';  




        创建一个新的测试表 

Mysql代码  收藏代码

  1. CREATE TABLE members (  

  2.     id INT,   

  3.     fname VARCHAR(25),  

  4.     lname VARCHAR(25),   

  5.     dob DATE  

  6. )  

  7. PARTITION BY RANGE(YEAR(dob)) (  

  8.     PARTITION p0 VALUES LESS THAN (1970),  

  9.     PARTITION p1 VALUES LESS THAN (1980),  

  10.     PARTITION p2 VALUES LESS THAN (1990)  

  11. );  




        直接用alter table tablename add partition 方式再最后面添加分区 

Mysql代码  收藏代码

  1. ALTER TABLE members ADD PARTITION (PARTITION p3 VALUES LESS THAN (2000));  




Mysql代码  收藏代码

  1. ALTER TABLE members reorganize partition p0 into (  

  2.     partition m0 values less than (1960),  

  3.     partition m1 values less than (1970)  

  4. );  

  5.   

  6. show create table members;  

  7.   

  8. CREATE TABLE `members` (  

  9.   `id` int(11) DEFAULT NULL,  

  10.   `fname` varchar(25) DEFAULT NULL,  

  11.   `lname` varchar(25) DEFAULT NULL,  

  12.   `dob` date DEFAULT NULL  

  13. ) ENGINE=MyISAM DEFAULT CHARSET=utf8  

  14. /*!50100 PARTITION BY RANGE (YEAR(dob))  

  15. (PARTITION m0 VALUES LESS THAN (1960) ENGINE = MyISAM,  

  16.  PARTITION m1 VALUES LESS THAN (1970) ENGINE = MyISAM,  

  17.  PARTITION p1 VALUES LESS THAN (1980) ENGINE = MyISAM,  

  18.  PARTITION p2 VALUES LESS THAN (1990) ENGINE = MyISAM,  

  19.  PARTITION p3 VALUES LESS THAN (2000) ENGINE = MyISAM) */  




        使用 REORGANIZE PARTITION进行数据的合并与拆分,数据是没有丢失的。 
             (详细出处参考:http://www.jb51.net/article/42544.htm) 
        如果用此方式在之前添加会报错,只能用另一种合并拆分分区的方式操作。


你可能感兴趣的:(新增分区,MySql数据分区操作)