alter user tbl_user_info_log add partition (partition tbl_user_info_log_202809 VALUES LESS THAN(UNIX_TIMESTAMP(‘2028/09/01’)),partition tbl_user_info_log_202810 VALUES LESS THAN(UNIX_TIMESTAMP(‘2028/10/01’))); 大致这样
PARTITION BY RANGE(UNIX_TIMESTAMP(oprDate)) (
PARTITION tbl_user_info_log_202806 VALUES LESS THAN (UNIX_TIMESTAMP('2028-07-01')),
...
)
那么补分区语句应为:
ALTER TABLE tbl_user_info_log ADD PARTITION (
PARTITION tbl_user_info_log_202809 VALUES LESS THAN (UNIX_TIMESTAMP('2028-10-01')),
PARTITION tbl_user_info_log_202810 VALUES LESS THAN (UNIX_TIMESTAMP('2028-11-01')),
PARTITION tbl_user_info_log_202811 VALUES LESS THAN (UNIX_TIMESTAMP('2028-12-01')),
PARTITION tbl_user_info_log_202812 VALUES LESS THAN (UNIX_TIMESTAMP('2029-01-01'))
);
注意:每个分区的 LESS THAN 值应为下一个分区的起始时间戳。
情况二:直接使用整数型日期字段(如 YYYYMM 格式)
如果 oprDate 是 INT 类型并以 202806 形式存储,且建表语句为:
PARTITION BY RANGE(oprDate) (
PARTITION tbl_user_info_log_202806 VALUES LESS THAN (202806),
...
)
实际上这种写法有误 —— LESS THAN (202806) 将无法包含 202806 数据。
正确的应是:
PARTITION BY RANGE(oprDate) (
PARTITION tbl_user_info_log_202806 VALUES LESS THAN (202807),
PARTITION tbl_user_info_log_202807 VALUES LESS THAN (202808),
...
)
此时补分区语句为:
ALTER TABLE tbl_user_info_log ADD PARTITION (
PARTITION tbl_user_info_log_202809 VALUES LESS THAN (202810),
PARTITION tbl_user_info_log_202810 VALUES LESS THAN (202811),
PARTITION tbl_user_info_log_202811 VALUES LESS THAN (202812),
PARTITION tbl_user_info_log_202812 VALUES LESS THAN (202813)
);
推荐操作步骤
查看原始建表语句:
SHOW CREATE TABLE tbl_user_info_log;
根据输出判断分区表达式类型,选择上述对应方案。
执行 ADD PARTITION 语句一次性添加多个分区。
验证分区是否成功添加:
SELECT TABLE_NAME, PARTITION_NAME, HIGH_VALUE
FROM INFORMATION_SCHEMA.PARTITIONS
WHERE TABLE_NAME = 'tbl_user_info_log'
AND PARTITION_NAME LIKE 'tbl_user_info_log_2028%';