Не могу сделать партиционирование таблицы по месяцам

Есть таблица:

        
    CREATE TABLE `Send-mail` (
    `id` int(11) NOT NULL,
    `email` varchar(150) CHARACTER SET cp1251 COLLATE cp1251_general_cs NOT NULL,
    `sender` varchar(150) CHARACTER SET cp1251 COLLATE cp1251_general_cs NOT NULL,
    `subject` varchar(150) CHARACTER SET cp1251 COLLATE cp1251_general_cs NOT NULL,
    `dir` varchar(150) CHARACTER SET cp1251 COLLATE cp1251_general_cs NOT NULL,
    `status` varchar(2) CHARACTER SET cp1251 COLLATE cp1251_general_cs NOT NULL,
    `datee` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
    ) ENGINE=InnoDB DEFAULT CHARSET=cp1251;
    ALTER TABLE `Send-mail`
    ADD PRIMARY KEY (`id`);

Партиционирование должно выглядеть как-то так:

ALTER TABLE Send-mail PARTITION BY RANGE ( MONTH(datee))  
(  
PARTITION p12 VALUES LESS THAN (1) ,  
PARTITION p1 VALUES LESS THAN (2) ,  
PARTITION p2 VALUES LESS THAN (3) ,  
PARTITION p3 VALUES LESS THAN (4) ,  
PARTITION p4 VALUES LESS THAN (5) ,    
PARTITION p5 VALUES LESS THAN (6) ,  
PARTITION p6 VALUES LESS THAN (7) ,  
PARTITION p7 VALUES LESS THAN (8) ,  
PARTITION p8 VALUES LESS THAN (9) ,  
PARTITION p9 VALUES LESS THAN (10) ,  
PARTITION p10 VALUES LESS THAN (11) ,  
PARTITION p11 VALUES LESS THAN (12) ,  
);   

Выдаёт ошибку:

Нераспознанная операция изменения. (near "" at position 0)

В чём причина?

В интернете нашла ещё такой код:

ALTER TABLE table_data PARTITION BY RANGE(to_days(`date`))  
SUBPARTITION BY HASH(`type_id`) SUBPARTITIONS 10  
(  
PARTITION p01 VALUES LESS THAN (to_days('2015-10-01')),  
PARTITION p02 VALUES LESS THAN (to_days('2015-11-01')),  
PARTITION p03 VALUES LESS THAN (to_days('2015-12-01')),  
PARTITION p04 VALUES LESS THAN (to_days('2016-01-01')),  
PARTITION p05 VALUES LESS THAN (to_days('2016-02-01')),  
PARTITION p06 VALUES LESS THAN (to_days('2016-03-01')),  
PARTITION p07 VALUES LESS THAN (to_days('2016-04-01')),  
PARTITION p08 VALUES LESS THAN (to_days('2016-05-01')),  
PARTITION p09 VALUES LESS THAN (to_days('2016-06-01')),  
PARTITION p10 VALUES LESS THAN (to_days('2016-07-01')),  
PARTITION p11 VALUES LESS THAN (to_days('2016-08-01')),  
PARTITION p12 VALUES LESS THAN (to_days('2016-09-01')),  
PARTITION p13 VALUES LESS THAN (to_days('2016-10-01')),  
PARTITION p14 VALUES LESS THAN (to_days('2016-11-01')),  
PARTITION p15 VALUES LESS THAN (to_days('2016-12-01')),  
PARTITION p16 VALUES LESS THAN (to_days('2017-01-01')),  
PARTITION p18 VALUES LESS THAN (to_days('2017-02-01')),  
PARTITION p19 VALUES LESS THAN (to_days('2017-03-01')),  
PARTITION p20 VALUES LESS THAN (to_days('2017-04-01')),  
PARTITION pmaxval VALUES LESS THAN MAXVALUE  
);  

Поменяла под себя, всё-равно не нравится...


Ответы (1 шт):

Автор решения: Ein

В запросе несколько ошибок.

  1. Название таблиы нужно обернуть в кавычки ALTER TABLE `Send-mail` PARTITION, т.к. парситься как "из Send вычесть mail"

  2. Вот тут не должно быть запятой PARTITION p11 VALUES LESS THAN (12) ,

  3. Вы не можете делать партификацию по полю с привязкой к локали(timestamp), т.е. вам нужно выставть тип datetime

  4. Первичный ключ должен охватывать все поля по которым делается разбивка

→ Ссылка