分区类型
1. 范围分区
range:表示范围分区。RANGE只能对整数类型的字段分区,不是整型的话需要用函数转换
CREATE TABLE test (
id INT NOT NULL,
first_name VARCHAR (20),
last_name VARCHAR (20),
birthday date,
PRIMARY KEY (`id`)
)partition by range(id)(
partition p0 values less than (3),
partition p1 values less than (5),
partition p2 values less than (7)
)
# 当插入大于分区的时报错: Table has no partition for value 10
insert into test VALUES (1,'张','三','1981-01-01'),(3,'王','五','1991-01-01'),(5,'李','四','2020-01-01')
#可添加另一个分区,大于分区的都放在这里
alter table test add partition (partition p3 values less than(MAXVALUE))
# 查询id 为5 的,然后看partitions栏,可以发现是p2
explain select * from test WHERE id = 5
- 添加分区
alter table test add partition (partition p3 values less than(9))
- 删除分区
#删除分区后对应分区内所有数据也会删除
alter table test drop partition p3
- 拆分分区
#把之前的大于7的数据重新分区为p3(9),和p4(maxvalue),分区数据没有丢失,而是重新分配进这两个分区,可插入数据后验证
alter table test reorganize partition p3 into (
partition p3 values less than (9),
partition p4 values less than (MAXVALUE)
)
- 合并分区
#同拆分分区,数据不回丢失
alter table test reorganize partition p3,p4 into (
partition p3 values less than (maxvalue)
)