mysql分区,如何使用时间戳来按月分区

432345 2015-09-08 10:16:20
mysql分区,如何使用时间戳来按月分区 。这个该如何实现。
...全文
2741 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
御驾-亲征 2016-06-04
  • 打赏
  • 举报
回复
如果时间字段使用的int型,存放的10位的时间戳,如何已该时间字段做分区
xiaobluesky 2015-09-29
  • 打赏
  • 举报
回复
引用 7 楼 432345的回复:
[quote=引用 2 楼 ACMAIN_CHM 的回复:] 把月转换成时间戳,然后按照这个值来分区。
分区不知道会不会容易踩到坑啊?[/quote] 我们也是这种处理方法,转成时间戳,没发现什么bug,但分区字段也需要存时间戳
道玄希言 2015-09-08
  • 打赏
  • 举报
回复
http://www.cnblogs.com/mliudong/p/3625522.html ALTER TABLE E_info PARTITION BY RANGE(DATE(dt) DIV 100) ( PARTITION p_2015_01 VALUES LESS THAN (201501), PARTITION p_2015_02 VALUES LESS THAN (201502), PARTITION p_2015_03 VALUES LESS THAN (201503), PARTITION p_2015_04 VALUES LESS THAN (201504), PARTITION p_2015_05 VALUES LESS THAN (201505), PARTITION p_2015_06 VALUES LESS THAN (201506), PARTITION p_2015_07 VALUES LESS THAN (201507), PARTITION p_2015_08 VALUES LESS THAN (201508), PARTITION p_2015_09 VALUES LESS THAN (201509), PARTITION p_2015_10 VALUES LESS THAN (201510), PARTITION p_2015_11 VALUES LESS THAN (201511), PARTITION p_2015_12 VALUES LESS THAN (201512), PARTITION p_catch_all VALUES LESS THAN MAXVALUE );
LongRui888 2015-09-08
  • 打赏
  • 举报
回复
你看看以前的例子: mysql 如何利用timestamp字段来按月份分区? http://bbs.csdn.net/topics/310192950
LongRui888 2015-09-08
  • 打赏
  • 举报
回复
引用 7 楼 yulongshuai 的回复:
[quote=引用 2 楼 ACMAIN_CHM 的回复:] 把月转换成时间戳,然后按照这个值来分区。
分区不知道会不会容易踩到坑啊?[/quote] 你要先去了解分区,如果不了解,不建议使用。
432345 2015-09-08
  • 打赏
  • 举报
回复
引用 2 楼 ACMAIN_CHM 的回复:
把月转换成时间戳,然后按照这个值来分区。
分区不知道会不会容易踩到坑啊?
432345 2015-09-08
  • 打赏
  • 举报
回复
引用 3 楼 yupeigu 的回复:
我在mysql 5.6中试了一下,如果是timestamp类型,在创建range分区表时会报错: mysql> CREATE TABLE t1 ( -> id int DEFAULT NULL, -> name varchar(20) DEFAULT NULL, -> t timestamp -> ) -> partition by range(YEAR(t)*100+MONTH(t)) -> ( -> PARTITION p201001 VALUES LESS THAN (201002), -> -> PARTITION p201002 VALUES LESS THAN (201003), -> -> PARTITION p201003 VALUES LESS THAN (201004), -> -> PARTITION p201004 VALUES LESS THAN (201005), -> -> PARTITION p201005 VALUES LESS THAN (201006), -> -> PARTITION p201006 VALUES LESS THAN (201007), -> -> PARTITION p201007 VALUES LESS THAN (201008), -> -> PARTITION p201008 VALUES LESS THAN (201009), -> -> PARTITION p201009 VALUES LESS THAN (201010), -> -> PARTITION pcatchall VALUES LESS THAN MAXVALUE -> ); ERROR 1486 (HY000): Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed mysql>
是的,不能这样使用。。现在只能月转换成时间戳,再分区了。
432345 2015-09-08
  • 打赏
  • 举报
回复
引用 2 楼 ACMAIN_CHM 的回复:
把月转换成时间戳,然后按照这个值来分区。
目前考虑到的也是这种方式,不知道会不会有什么问题。
LongRui888 2015-09-08
  • 打赏
  • 举报
回复
如果是采用这种方法,也会报错: mysql> CREATE TABLE t2 ( -> id int DEFAULT NULL, -> name varchar(20) DEFAULT NULL, -> t timestamp -> ) -> partition by range(t) -> ( -> PARTITION p201001 VALUES LESS THAN ('2010-02-01'), -> -> PARTITION p201002 VALUES LESS THAN ('2010-02-03'), -> -> PARTITION pcatchall VALUES LESS THAN MAXVALUE -> ); ERROR 1697 (HY000): VALUES value for partition 'p201001' must have type INT mysql>
LongRui888 2015-09-08
  • 打赏
  • 举报
回复
我在mysql 5.6中试了一下,如果是timestamp类型,在创建range分区表时会报错: mysql> CREATE TABLE t1 ( -> id int DEFAULT NULL, -> name varchar(20) DEFAULT NULL, -> t timestamp -> ) -> partition by range(YEAR(t)*100+MONTH(t)) -> ( -> PARTITION p201001 VALUES LESS THAN (201002), -> -> PARTITION p201002 VALUES LESS THAN (201003), -> -> PARTITION p201003 VALUES LESS THAN (201004), -> -> PARTITION p201004 VALUES LESS THAN (201005), -> -> PARTITION p201005 VALUES LESS THAN (201006), -> -> PARTITION p201006 VALUES LESS THAN (201007), -> -> PARTITION p201007 VALUES LESS THAN (201008), -> -> PARTITION p201008 VALUES LESS THAN (201009), -> -> PARTITION p201009 VALUES LESS THAN (201010), -> -> PARTITION pcatchall VALUES LESS THAN MAXVALUE -> ); ERROR 1486 (HY000): Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed mysql>
ACMAIN_CHM 2015-09-08
  • 打赏
  • 举报
回复
把月转换成时间戳,然后按照这个值来分区。

56,865

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧