删除分区值

删除分区值:通过删除分区值操作从现有列表分区表的分区键值中删除部分值。

使用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;