MySQL 分区错误

标签 mysql partitioning

我正在运行 MySQL 5.6 并有下表:

CREATE TABLE `rawdata` (
  `RawDataSeq` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `SpeciesSeq` int(10) unsigned DEFAULT NULL,
  `DataSourceSeq` int(10) unsigned DEFAULT NULL,
  `MeasurementSeq` int(10) unsigned DEFAULT NULL,
  `RecordingDateTime` datetime DEFAULT NULL,
  `RawSensorData` varchar(100) DEFAULT NULL,
  `RawDataNumeric` decimal(36,18) DEFAULT NULL,
  `RawDataString` varchar(100) DEFAULT NULL,
  `RawDataDate` datetime DEFAULT NULL,
  `RawDataTime` varchar(45) DEFAULT NULL,
  `RawDataDateTime` datetime DEFAULT NULL,
  `ActiveRecord` int(10) unsigned DEFAULT NULL,
  `LastUpdateDate` datetime DEFAULT NULL,
  `UserId` varchar(6) DEFAULT NULL,
  `BadData` varchar(200) DEFAULT NULL,
  PRIMARY KEY (`RawDataSeq`)
) ENGINE=MyISAM AUTO_INCREMENT=5676258 DEFAULT CHARSET=latin1

我尝试使用以下命令按“RecordingDateTime”对表进行分区:

ALTER TABLE rawdata PARTITION BY RANGE (RecordingDateTime) (
  PARTITION p0 VALUES LESS THAN (2013),
  PARTITION p1 VALUES LESS THAN (2014),
  PARTITION p2 VALUES LESS THAN (2015),
  PARTITION p3 VALUES LESS THAN (UNIX_TIMESTAMP('2015-06-01 00:00:00')),
  PARTITION p4 VALUES LESS THAN MAXVALUE
);

我收到以下错误消息:

查询:ALTER TABLE rawdata PARTITION BY RANGE (RecordingDateTime) ( PARTITION p0 VALUES LESS THAN (2013), PARTITION p1 VALUES LESS THAN... 错误代码:1659 字段“RecordingDateTime”属于此类分区不允许的类型

非常感谢任何帮助。

最佳答案

更改为

PRIMARY KEY (`RawDataSeq`, RecordingDateTime)

ALTER TABLE rawdata PARTITION BY RANGE (TO_DAYS(RecordingDateTime)) (
  PARTITION p_old  VALUES LESS THAN (TO_DAYS('2013-01-01')),
  PARTITION p2013  VALUES LESS THAN (TO_DAYS('2014-01-01')),
  PARTITION p2014  VALUES LESS THAN (TO_DAYS('2015-01-01')),
  PARTITION p2015  VALUES LESS THAN (TO_DAYS('2016-01-01')),
  PARTITION future VALUES LESS THAN MAXVALUE
);

每年 12 月您需要的代码可以找到 here .

关于MySQL 分区错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31107129/

相关文章:

javascript - 如何获取 ID 作为值和名称以显示在 dropdownlist php 中

php - SQLSTATE[HY000] [2003] 无法连接到 MySQL 服务器,出现 '127.0.0.1' (61) 错误 Laravel 4.1

mysql - 如何改进这个 SQL? (MySQL数据库)

mysql - 如何在mariadb中创建带有回复限制的评论系统

MySQL注释掉alter table分区语句

linux - 在 linux 中获取硬盘的可用空间

postgresql - Postgres 通过分区扩展统计信息

MYSQL 函数,是 Workbench 还是只是菜鸟?

postgresql - 如何将新列添加到postgres中的分区表

scala - Spark 是否在读取时维护 Parquet 分区?