达梦数据库分区表管理,例子:range分区表

按照range(范围)创建一个分区表,分区的字段是time字段;将表callinfo按照time字段的值分为4个分区,其中time<2010-04-01的分为p1区; time>=2010-04-01&time<2010-07-01的分为p2区;time>=2010-07-01&time<2010-10-01分为p3区,time>=2010-10-01&time<2010-12-31的分为p4区
partition by 用于指定分区方式
range 表示分区的方式是范围划分
partition p1 用于指定分区的名字
values less than 小于关系
equ or values less than 小于等于关系
达梦数据库分区表管理,例子:range分区表
查看all_tab表的列名有哪些:
达梦数据库分区表管理,例子:range分区表

查看创建的分区表的信息:和创建表的语句一致;
Select table_owner,table_name,partition_name,HIGH_VALUE,PARTITION_POSITION,TABLESPACE_NAME from all_tab_partitions where table_name=upper(‘sales01’);
达梦数据库分区表管理,例子:range分区表

向分区表callinfo根据time字段插入数据,并查询各个分区的情况:
由查询结果可以得出结论:
由2010-04-01被划分到P2区得结论:values less than 表示:“小于”;
再加上2010-12-31被划分到P4区得结论:equ values less than 表示:“小于等于”
由time=NULL被视为小于分区的最小段,此处可以理解为NULL表示时间为0000-00-00;
由2011-04-01不能插入被分区后的表得:分区范围之外的数据,不能插入表内,可以通过增加新的分区,范围分区的time字段包含了2011-04-01,然后再向分区表callinfo插入即可。
增加新的分区:
alter table + 分区表的名字 + add partition 新的区名 values less than(分区字段的值)
查询分区内数据的方法:select * from +表名+partition(区名);

达梦数据库分区表管理,例子:range分区表
达梦数据库分区表管理,例子:range分区表

对分区表的数据进行更新:如下图所示,首先在p5分区里面添加一条数据,time字段值为:2011-02-01;
使用update语句更新该条数据到2020-02-05,提示:没有找到合适的分区导致更新失败;
使用update语句更新该条数据到2010-02-05,提示:分区列更新将引起分区的更改导致更新失败;
使用update语句更新该条数据到2011-02-05,更新成功;
结论:update语句在数据所属的子分区内,可以修改分区列的内容,超出该子分区的范围则不能对数据进行修改
达梦数据库分区表管理,例子:range分区表

删除子分区:
删除p3分区前:callinfo表有5个子分区,9条数据,其中p3区有2条数据
达梦数据库分区表管理,例子:range分区表
达梦数据库分区表管理,例子:range分区表

执行alter table callinfo drop partition p3命令,删除p3分区,可以在all_tab_partitions里面查询到的callinfo表里面只剩下4个分区了,并且它们的time分区范围没有,并且原来p3表里面的数据消失了。
结论:删除子分区,数据也会被删除
达梦数据库分区表管理,例子:range分区表
达梦数据库分区表管理,例子:range分区表

重新给原来p3的范围:2010-10-01增加一个分区,报错,提示:范围分区值费递增,最新的范围分区值是p5区的2011-05-05,新增的分区,time字段的值也要大于2011-05-05;不能递减
达梦数据库分区表管理,例子:range分区表

重新给原p3范围插入新的数据,新数据应该属于p4区的范畴了:
达梦数据库分区表管理,例子:range分区表