Не могу сделать партиционирование таблицы по месяцам
Есть таблица:
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
→ Ссылка
В запросе несколько ошибок.
Название таблиы нужно обернуть в кавычки
ALTER TABLE `Send-mail` PARTITION, т.к. парситься как "из Send вычесть mail"Вот тут не должно быть запятой
PARTITION p11 VALUES LESS THAN (12) ,Вы не можете делать партификацию по полю с привязкой к локали(
timestamp), т.е. вам нужно выставть типdatetimeПервичный ключ должен охватывать все поля по которым делается разбивка