
# RANGE-LIST
#### 约束与限制
- LIST分区类型要求分区定义中的value或value_list都是唯一的，不同分区定义里也需要不能重复引入。
- 对于NULL的处理，只有value中包含了NULL值，才能插入或查询出NULL值，否则是不符合定义的，不允许插入。
- 每个主分区下的子分区可以看成是一个新的一级的LIST分区表，因此所有的规则和约束都同一级的LIST是一样的, 不同主分区下的子分区定义可以不一样。
 
#### 语法
创建一个或多个RANGE-LIST分区表，其中每个分区可能有一个或一个以上的子分区。
```
CREATE TABLE ... PARTITION BY RANGE {(expr) | COLUMNS(column_list)}
   SUBPARTITION BY LIST {(expr) | COLUMNS(column_list)}
[(partition_definition [, partition_definition] ...)];
```
其中，partition_definition为：
```
PARTITION partition_name
       VALUES LESS THAN {(value | value_list) | MAXVALUE}
[(subpartition_definition [, subpartition_definition] ...)]
```
subpartition_definition为：
```
SUBPARTITION subpartition_name
       VALUES IN {(value | value_list)}
```
表1参数说明 
| **参数名称**          | **描述**                                    |
|:---|:---|
| expr              | 分区字段表达式。目前只支持INT类型，不支持字符类型。               |
| column_list       | RANGE COLUMNS的情况下使用。分区字段列表，不支持表达式，可以支持多列。 |
| value             | 分区边界值。                                    |
| value_list        | RANGE COLUMNS的情况下使用，多个字段的边界值。             |
| MAXVALUE          | 最大值。                                      |
| partition_name    | 分区名称，同一个表中不可重复。                           |
| subpartition_name | 子分区名称， 同一个表中不可重复。                         |
   
#### 使用示例
- **RANGE-LIST类型的使用示例**
  ```
  CREATE TABLE tbl_range_list (col1 INT, col2 INT, col3 varchar(20))
  PARTITION BY RANGE(col1)
      SUBPARTITION BY LIST(col2)
  (
    PARTITION m1 VALUES LESS THAN(1000) (
      SUBPARTITION p0 VALUES in (1, 2),
  SUBPARTITION p1 VALUES in (3, 4),
  SUBPARTITION p2 VALUES in (5, 6)
    ),
    PARTITION m2 VALUES LESS THAN(2000) (
      SUBPARTITION p3 VALUES in (1, 2),
  SUBPARTITION p4 VALUES in (3, 4),
  SUBPARTITION p5 VALUES in (5, 6)
    ),
    PARTITION m3 VALUES LESS THAN(MAXVALUE) (
      SUBPARTITION p6 VALUES in (1, 2),
  SUBPARTITION p7 VALUES in (3, 4),
  SUBPARTITION p8 VALUES in (5, 6)
    )
  );
  ```
  
- **RANGE COLUMNS-LIST类型的使用示例**
  ```
  CREATE TABLE tbl_range_columns_list
  (
      col1 INT,
      col2 INT,
      col3 varchar(20),
      col4 DATE
  )
  PARTITION BY RANGE COLUMNS(col4)
  SUBPARTITION BY LIST(col1)
  (
    PARTITION dp1 VALUES LESS THAN('2023-01-01')(
      SUBPARTITION p0 VALUES in (1, 2),
      SUBPARTITION p1 VALUES in (3, 4),
      SUBPARTITION p2 VALUES in (5, 6)
    ),
    PARTITION dp2 VALUES LESS THAN('2024-01-01')(
      SUBPARTITION p3 VALUES in (1, 2),
      SUBPARTITION p4 VALUES in (3, 4),
      SUBPARTITION p5 VALUES in (5, 6)
    ),
    PARTITION dp3 VALUES LESS THAN('2025-01-01')(
      SUBPARTITION p6 VALUES in (1, 2),
      SUBPARTITION p7 VALUES in (3, 4),
      SUBPARTITION p8 VALUES in (5, 6)
    )
  );
  ```
  
 
