本文檔介紹了將分區和子分區添加到現有分區表中的方法。
語法
ALTER TABLE…ADD PARTITION命令用于將分區和子分區添加到現有的分區表中。
ALTER TABLE table_name ADD PARTITION partition_definition;
partition_definition
為:
{list_partition | range_partition | hash_partition | key_partition}
其中list_partition
為:
PARTITION [partition_name]
VALUES IN (value[, value]...)
[TABLESPACE tablespace_name]、
(subpartition, ...)
range_partition
為:
PARTITION partition_name
VALUES LESS THAN (value[, value]...)
[TABLESPACE tablespace_name]
[(subpartition, ...)]
hash_partition
/key_partition
為:
PARTITION partition_name
[TABLESPACE tablespace_name]
(subpartition, ...)
其中subpartition
為:
{list_subpartition | range_subpartition | hash_partition | key_partition}
list_subpartition
為:
SUBPARTITION [subpartition_name]
VALUES IN (value[, value]...)
[TABLESPACE tablespace_name]
range_subpartition
為:
SUBPARTITION [subpartition_name ]
VALUES LESS THAN (value[, value]...)
[TABLESPACE tablespace_name]
hash_partition
/key_subpartition
為:
SUBPARTITION [subpartition_name ]
[TABLESPACE tablespace_name]
參數
參數 | 參數說明 |
table_name | 要創建的表名稱(可以采用模式限定的方式引用)。 |
partition_name | 要創建的分區名稱。分區名稱在所有分區和子分區中必須是唯一的,且必須遵循給對象標識符命名的慣例。 |
subpartition_name | 要創建的子分區名稱。子分區名稱在所有分區和子分區中必須是唯一的,且必須遵循給對象標識符命名的慣例。 |
(value[, value]...) | 使用 |
tablespace_name | 分區或子分區所屬的表空間名稱。 |
描述
ALTER TABLE…ADD PARTITION
命令用于添加分區和子分區到現有的分區中,且這個分區必須已經進行了子分區的劃分。新的分區和子分區必須與現有分區和子分區的類型相同。新分區規則必須引用和定義現有分區的分區規則中指定的相同列。
如果您沒有指定表空間(包括TABLESPACE子句指定新的子分區所屬的表空間),那么子分區將創建于默認表空間。
如果對表進行了索引設置,那么索引將創建在新的子分區上。
示例
RANGE分區必須以升序的方式指定。不能將新分區添加在RANGE分區表中現有的分區之前。
添加分區到
sales_range_range
分區表:假設數據庫中存在
sales_range_range
分區表,建表語句如下:CREATE TABLE sales_range_range ( dept_no INT, part_no INT, country varchar(20), date DATE, amount INT ) PARTITION BY RANGE(dept_no) SUBPARTITION BY RANGE(part_no) ( PARTITION p0 VALUES LESS THAN (1000) ( SUBPARTITION s0 VALUES LESS THAN(100), SUBPARTITION s1 VALUES LESS THAN(200), SUBPARTITION s2 VALUES LESS THAN(300), SUBPARTITION s3 VALUES LESS THAN(MAXVALUE) ) );
使用
ALTER TABLE…ADD PARTITION
命令添加分區和子分區到sales_range_range
分區表。ALTER TABLE sales_range_range ADD PARTITION ( PARTITION p_2015 VALUES less than (2016) ( SUBPARTITION q1_2015 VALUES LESS THAN(4), SUBPARTITION q2_2015 VALUES LESS THAN(7), SUBPARTITION q3_2015 VALUES LESS THAN(10), SUBPARTITION q4_2015 VALUES LESS THAN(13) ) );
添加分區到
sales_list_range
分區表:假設數據庫中存在
sales_list_range
分區表,建表語句如下:CREATE TABLE sales_list_range ( dept_no INT, part_no INT, country varchar(20), date DATE, amount INT ) PARTITION BY LIST (dept_no) SUBPARTITION BY RANGE(amount) ( PARTITION p0 VALUES in (1, 2)( SUBPARTITION s0 VALUES LESS THAN(1000), SUBPARTITION s1 VALUES LESS THAN(2000), SUBPARTITION s2 VALUES LESS THAN(3000), SUBPARTITION s3 VALUES LESS THAN(MAXVALUE) ) );
使用
ALTER TABLE…ADD PARTITION
命令添加分區和子分區到sales_list_range
分區表。ALTER TABLE sales_list_range ADD PARTITION ( PARTITION p3 VALUES in (7, 8)( SUBPARTITION q1_2015 VALUES LESS THAN(4), SUBPARTITION q2_2015 VALUES LESS THAN(7), SUBPARTITION q3_2015 VALUES LESS THAN(10), SUBPARTITION q4_2015 VALUES LESS THAN(13) ) );
添加分區到
sales_hash_hash
分區表:假設數據庫中存在
sales_hash_hash
分區表,建表語句如下:CREATE TABLE sales_hash_hash ( dept_no INT, part_no INT, country varchar(20), date DATE, amount INT ) PARTITION BY HASH(dept_no) PARTITIONS 9 SUBPARTITION BY HASH(part_no) SUBPARTITIONS 3 ;
使用
ALTER TABLE…ADD PARTITION
命令添加分區和子分區到sales_hash_hash
分區表。ALTER TABLE sales_hash_hash ADD PARTITION ( PARTITION m3( SUBPARTITION d6, SUBPARTITION d7, SUBPARTITION d8 ) );
添加分區到
sales_key_key
分區表:假設數據庫中存在
sales_key_key
分區表,建表語句如下:CREATE TABLE sales_key_key ( dept_no varchar(20), part_no varchar(20), country varchar(20), date DATE, amount INT ) PARTITION BY KEY(dept_no) PARTITIONS 3 SUBPARTITION BY KEY(part_no) SUBPARTITIONS 2;
使用
ALTER TABLE…ADD PARTITION
命令添加分區和子分區到sales_key_key
分區表。ALTER TABLE sales_key_key ADD PARTITION ( PARTITION m3( SUBPARTITION d6, SUBPARTITION d7 ) );