设置间隔分区间隔值¶
使用ALTER TABLE … SET INTERVAL语句设置间隔分区表的间隔值,当设置间隔值后,间隔分区表的过度点会移动到当前最后一个子分区表上。
设置间隔分区表间隔值操作主要实现以下:
- 设置间隔值,将范围分区表转化为间隔分区表。
- 修改间隔分区表的间隔值,与此同时,使用原间隔值的间隔分区表将会转化为范围分区表,而后新建的间隔分区表将会采用新的间隔值。
- 修改间隔分区表的表空间存储属性。
可以将间隔分区表转化为范围分区表,已经存在的间隔分区表会自动转化为范围分区表。
当interval分区键是date或timestamp类型时,在设置interval值(单位为month)需要对最后一个分区的的键值进行检查新设置的interval值是否会在扩展时产生错误的日期。
示例:设置间隔分区表间隔值¶
-- 清理环境
DROP TABLE tab;
-- 创建分区表
CREATE TABLE tab
(
c1 TIMESTAMP,
c2 INT
)
PARTITION BY RANGE(c1)
INTERVAL (INTERVAL '1' DAY)
(
PARTITION p1 VALUES LESS THAN('2011-1-1'),
PARTITION p2 VALUES LESS THAN('2011-1-2'),
PARTITION p3 VALUES LESS THAN('2011-1-3'),
PARTITION p4 VALUES LESS THAN('2011-1-31')
);
-- 删除表和表空间
DROP TABLE tab CASCADE;
如上所示,当用户想设置interval值为1 month时,虽然最后一个分区的键值是31号,在需要扩展时,数据库会自动检查下个月的合法日期并进行扩展,使得2011-1-31加上1个月变成2011-2-28。
当日期部分是在[1,28]号之间时,是不需要检查的,但是29、30、31这三个日期是需要检查的。