原先可行的建分区表方法:
劣势:必须要把created_at作为主键之一
ALTER TABLE files PARTITION BY RANGE
(UNIX_TIMESTAMP(created_at))
(PARTITION {$pname} VALUES LESS THAN ({$less_than_time}))
我现在想按照ID中隐藏的时间戳来做条件
我现在把一部分时间戳放到了ID中,比如现在的ID是9777215210102229301,
其中9777215是时间的一部分,它是1509777215截断前面3位得到的,当我入库的时候,我希望通过拼接当前时间来存入对应分区,于是我尝试如下操作:
selct CONVERT(CONCAT(left(unix_timestamp(now()),3), left('9777215210102229301',7)),SIGNED)
发现 没问题,可以得到正确的时间戳,但我把它替换到分区表构建语句中就报错了
替换语句
ALTER TABLE files PARTITION BY
RANGE(CONVERT(CONCAT(left(unix_timestamp(now()),3), left(id,7)),SIGNED))
(PARTITION {$pname} VALUES LESS THAN ({$less_than_time}))
报错:
ERROR 1064 (42000): Constant, random or timezone-dependent expressions in (sub)
partitioning function are not allowed near ')
(PARTITION '2017' VALUES LESS THAN (150981119))' at line 1
这样也不行
ALTER TABLE files PARTITION BY
RANGE(
UNIX_TIMESTAMP(FROM_UNIXTIME(
CONCAT(left(unix_timestamp(now()),3), left('9777215210102229301',7)))
)
)
(PARTITION '2017' VALUES LESS THAN 150981119)
大神们可否帮助解决