oracle-分区(笔记)


partition by 用于指定分区方式
range 表示分区的方式是范围划分
partition pn 用于指定分区的名字
values less than 指定分区的上界(上限)
---------------------------范围分区--------------------------------
--查看表分区信息
select * from all_part_tables;
--查看表分区详细信息
select * from user_tab_partitions;

--创建范围分区表 先一个分区 后修改添加
create table userinfo
(
       uname varchar2(20),
       age number(2)
)
partition by range(age)--按年龄范围分区
(
          partition p1 values less than (18)
)
--修改表,添加2个分区
alter table userinfo add partition p2  values less than(30);
alter table userinfo add partition p3  values less than(50);
alter table userinfo add partition p4  values less than(maxvalue);--其他更大的值
--修改分区,删除一个分区 分区中的数据随之删除
ALTER TABLE userinfo DROP PARTITION P3;
--截断分区 – 删除指定分区中的所有记录
ALTER TABLE userinfo TRUNCATE PARTITION P3;
--合并分区 - 将范围分区或复合分区的两个相邻分区连接起来
ALTER TABLE userinfo
MERGE PARTITIONS p1, p2 INTO PARTITION S2;
--将一个大分区中的记录拆分到两个分区中  s2原来范围(0-30)分为(0-18和18-30)
ALTER TABLE userinfo SPLIT PARTITION s2 AT (18)
INTO (PARTITION P21, PARTITION P22);
--重命名表分区
ALTER TABLE userinfo RENAME PARTITION P21 TO P2;

--添加测试数据
insert into userinfo values('张飞',16);
insert into userinfo values('曹操',20);
insert into userinfo values('诸葛亮',35);
insert into userinfo values('赵云',26);
commit;
--按分区查询
select * from userinfo PARTITION(p3);

--------------------------列表分区---------------------------
CREATE TABLE Student
(
    SID number (4),
    SName varchar2 (14),
    SAddress varchar2 (15)
)
PARTITION BY LIST (SAddress)
(
    Partition shanxi values ('西安市','咸阳市'),
    Partition henan values ('焦作', '郑州')
);
--修改表 添加一个默认分区,即不在指定列表中的都放入此分区
alter table student add partition other values(default);
-------添加测试数据
insert into student values(1,'小明','西安市');
insert into student values(2,'小强','焦作');
insert into student values(3,'小树','郑州');
insert into student values(4,'近平','北京市');--如果没有默认分区,则没有符合分区的不能插入成功
insert into student values(5,'老王','咸阳市');
select * from student partition(henan);--注意分区参数不加单引号
select * from student partition(other);--

-----------散列分区----通过在分区键上执行HASH函数决定存储的分区--将数据平均地分布到不同的分区---------
--第一种
CREATE TABLE HASH_TABLE
(
  COL NUMBER(8),
  INF VARCHAR2(100)
)
PARTITION BY HASH (COL)
(
  PARTITION PART01 ,
  PARTITION PART02 ,
  PARTITION PART03
)
--简写第二种:
CREATE TABLE myemp
(
    empno NUMBER (4), --tablespace nn
    ename VARCHAR2 (30),
    sal   NUMBER
)
PARTITION BY  HASH (empno) PARTITIONS 8
--STORE IN (users); --表空间
select * from hash_table partition(part01);
select * from myemp partition(SYS_P50)

--------复合分区------范围分区与散列分区或列表分区的组合-----------------------
drop table sales;
CREATE TABLE SALES
(
    PRODUCT_ID VARCHAR2 (5),
    SALES_DATE DATE NOT NULL,
    SALES_COST NUMBER (10)
)
PARTITION BY RANGE (SALES_DATE)
SUBPARTITION BY HASH (PRODUCT_ID)--子分区,在范围分区的基础上进行5个散列分区
SUBPARTITIONS 5    
(
    PARTITION S1 VALUES LESS THAN (TO_DATE('01/4月/2001',
    'DD/MON/YYYY')),
    PARTITION S2 VALUES LESS THAN (TO_DATE('01/7月/2001',
    'DD/MON/YYYY')),
    PARTITION S3 VALUES LESS THAN (TO_DATE('01/9月/2001',
    'DD/MON/YYYY')),
    PARTITION S4 VALUES LESS THAN (MAXVALUE)
);
------补充:在范围基础上,进行列表分区
CREATE TABLE SALES
(
PRODUCT_ID VARCHAR2(5),
SALES_DATE DATE,
SALES_COST NUMBER(10),
STATUS VARCHAR2(20)
)
PARTITION BY RANGE(SALES_DATE) SUBPARTITION BY LIST (STATUS)
(
   PARTITION P1 VALUES LESS THAN(TO_DATE('2003-01-01','YYYY-MM-DD'))TABLESPACE rptfact2009
          (
              SUBPARTITION P1SUB1 VALUES ('ACTIVE') TABLESPACE rptfact2009,
              SUBPARTITION P1SUB2 VALUES ('INACTIVE') TABLESPACE rptfact2009
          ),
   PARTITION P2 VALUES LESS THAN (TO_DATE('2003-03-01','YYYY-MM-DD')) TABLESPACE rptfact2009
          (
              SUBPARTITION P2SUB1 VALUES ('ACTIVE') TABLESPACE rptfact2009,
              SUBPARTITION P2SUB2 VALUES ('INACTIVE') TABLESPACE rptfact2009
          )
)




------------分区------0-18  18-30  30-50 50-100--------where age=37---1000000---A,B,C,D 。。。。。
 1,wang 34;                 A:4,6,7 B 2,3 C 1,5        
 2,zhang 23;
 3,li , 26
 4,liddd , 16
 5,www , 37
 6,ttt , 18
 7,QQQQ ,15
 
 create table studentinfo
 (
   sid number,
   sname varchar2(20),
   sage number(2)
 )
 partition by range(sage)
 (
           partition p1 values less than(18),
           partition p2 values less than(30),
           partition p2 values less than(50),
           partition p2 values less than(Maxvalue),
 )
 ;






转载于:https://www.cnblogs.com/baobeiqi-e/p/9884866.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值