删除分区值¶
删除分区值:通过删除分区值操作从现有列表分区表的分区键值中删除部分值。
使用ALTER TABLE … MODIFY PARTITION .. DROP VALUES语句删除列表分区表的部分分区键值。执行该操作时,需要执行合法性检查,即检查分区中是否存在符合要被删除值的行。如果找到任何符合条件的行,则允许删除分区值操作。在必要的情况下时, 可以在操作之前使用 DELETE 语句从表中删除符合删除值的相应行。
任何相应的局部分区索引的分区键值也会相应的删除;因为不会涉及到数据的变化,所以全局索引和分区索引都保持可用。不可以删除default子分区表中的分区值。可以使用类似的方式删除子分区表中的分区值。
注:不能删除分区表所有的分区键值。如果要删除分区表的所有分区键值,使用ALTER TABLE … DROP PARTITION语句删除分区表代替。
示例1:删除一级分区表分区值¶
下面的例子从分区表中删除集合('B2', 'B3')分区键值
-- 清理环境
DROP TABLE tab;
-- 创建分区表
CREATE TABLE tab
(
c1 int,
c2 varchar(2)
)
PARTITION BY LIST(c2)
(
PARTITION p1 VALUES('A1', 'A2'),
PARTITION p2 VALUES('B1', 'B2', 'B3')
);
ALTER TABLE tab
MODIFY PARTITION p2
DROP VALUES ('B2', 'B3');
-- 删除表和表空间
DROP TABLE tab CASCADE;
不能删除列表分区的DEFAULT分区键值。
使用ALTER TABLE … MODIFY SUBPARTITION … DROP VALUES语句删除二级子分区表分区值。
示例2:删除二级分区表分区值¶
下面的例子删除二级子分区表p1_sub2的分区值(’B3’)
-- 清理环境
DROP TABLE tab;
-- 创建分区表
CREATE TABLE tab
(
c1 int,
c2 varchar(2)
)
PARTITION BY RANGE(C1)
SUBPARTITION BY LIST(C2)
(
PARTITION p1 VALUES LESS THAN(10)
(
SUBPARTITION p1_sub1 VALUES ('A1', 'A2'),
SUBPARTITION p1_sub2 VALUES ('B1', 'B2', 'B3')
),
PARTITION p2 VALUES LESS THAN(20)
);
ALTER TABLE tab
MODIFY SUBPARTITION p1_sub2
DROP VALUES ('B3');
-- 删除表和表空间
DROP TABLE tab CASCADE;