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) */  
posted @ 2018-07-06 13:56  get("新技能")  阅读(4944)  评论(0编辑  收藏  举报