Management of RANGE and LIST Partitions > (PARTITION np VALUES IN (4, 8, 12)); ERROR 1465 (HY000): Multiple definition of same constant » in list partitioning Because any rows with the  data  column value  12  have already been assigned to partition  p1 , you cannot create a new partition on table  tt  that includes  12  in its value list. To accomplish this, you could drop p1 , and add  np  and then a new  p1  with a modified definition. However, as discussed earlier, this would result in the loss of all data stored in  p1 —and it is often the case that this is not what you really want to do. Another solution might appear to be to make a copy of the table with the new partitioning and to copy the data into it using  CREATE TABLE ... SELECT ... , then drop the old table and rename the new one, but this could be very time-consuming when dealing with a large amounts of data. This also might not be feasible in situations where high availability is a requirement. You can add multiple partitions in a single  ALTER TABLE ... ADD PARTITION  statement as shown here: Fortunately, MySQL’s partitioning implementation provides ways to redefine partitions without losing data. Let us look first at a couple of simple examples involving  RANGE  partitioning. Recall the  members  table which is now defined as shown here: Suppose that you would like to move all rows representing members born before 1960 into a separate partition. As we have already seen, this cannot be done using  ALTER TABLE ... ADD PARTITION . However, you can use another partition-related extension to  ALTER TABLE  to accomplish this: 4691 ALTER TABLE members REORGANIZE PARTITION n0 INTO ( PARTITION s0 VALUES LESS THAN (1960), PARTITION s1 VALUES LESS THAN (1970) ); mysql>  SHOW CREATE TABLE members\G *************************** 1. row *************************** Table: members Create Table: CREATE TABLE ‘members‘ ( ‘id‘ int(11) DEFAULT NULL, ‘fname‘ varchar(25) DEFAULT NULL, ‘lname‘ varchar(25) DEFAULT NULL, ‘dob‘ date DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE ( YEAR(dob)) (PARTITION n0 VALUES LESS THAN (1970) ENGINE = InnoDB,  PARTITION n1 VALUES LESS THAN (1980) ENGINE = InnoDB,  PARTITION p1 VALUES LESS THAN (1990) ENGINE = InnoDB,  PARTITION p2 VALUES LESS THAN (2000) ENGINE = InnoDB,  PARTITION p3 VALUES LESS THAN (2010) ENGINE = InnoDB) */ 1 row in set (0.00 sec) CREATE TABLE employees ( id INT NOT NULL, fname VARCHAR(50) NOT NULL, lname VARCHAR(50) NOT NULL, hired DATE NOT NULL ) PARTITION BY RANGE( YEAR(hired) ) ( PARTITION p1 VALUES LESS THAN (1991), PARTITION p2 VALUES LESS THAN (1996), PARTITION p3 VALUES LESS THAN (2001), PARTITION p4 VALUES LESS THAN (2005) ); ALTER TABLE employees ADD PARTITION ( PARTITION p5 VALUES LESS THAN (2010), PARTITION p6 VALUES LESS THAN MAXVALUE );