oracle Partition


/**根据区分表空间建表**/     
CREATE TABLE MYDB
(SID NUMBER(2) PRIMARY KEY,
     SNAME CHAR(5) NOT NULL,
     SPHONE NUMBER(11) NULL,
     SADDR VARCHAR2(10) DEFAULT '广东')
     PARTITION BY LIST (SADDR)--列表分区:根据某个字段的具体值分区(list)
     (PARTITION PA_ADD1 VALUES ('广东') TABLESPACE SYSTEM,
      PARTITION PA_ADD2 VALUES ('广西') TABLESPACE USERS
     )
     
CREATE TABLE MYDB
(SID NUMBER(2) PRIMARY KEY,
     SNAME CHAR(5) NOT NULL,
     SPHONE NUMBER(11) NULL,
     SADDR VARCHAR2(10) DEFAULT '广东')
     PARTITION BY RANGE (SID)--范围分区:根据某个字段在某个范围内进行分区(range...less)
     (PARTITION PA_ADD1 VALUES LESS THAN(100) TABLESPACE SYSTEM,--list than
      PARTITION PA_ADD2 VALUES LESS THAN(MAXVALUE) TABLESPACE USERS
     )

CREATE TABLE MYDB
(SID NUMBER(2) PRIMARY KEY,
     SNAME CHAR(5) NOT NULL,
     SPHONE NUMBER(11) NULL,
     SADDR VARCHAR2(10) DEFAULT '广东')
     PARTITION BY HASH (SID)--散列分区:根据字段的hash值进行均匀分布(hash)
     (PARTITION PA_ADD1 TABLESPACE SYSTEM,
      PARTITION PA_ADD2 TABLESPACE USERS
     ) 
     /**
     简写
     建议分区的数量采用2的n次方,这样可以使得各个分区间数据分布更加均匀。
     PARTITION BY HASH (SID) PARTITIONS 4(分区数) STORE IN (SP1,SP2,SP3,SP4); 
     **/ 
        
CREATE TABLE MYDB
(SID NUMBER(2) PRIMARY KEY,
     SNAME CHAR(5) NOT NULL,
     SPHONE NUMBER(11) NULL,
     SADDR VARCHAR2(10) DEFAULT '广东')
     PARTITION BY RANGE (SADRR) SUBPARTITION BY LIST (SID)--复合分区(范围+散列、范围+列表)
     (PARTITION PA_ID1 VALUES LESS THAN(100) TABLESPACE SP1
     (
        SUBPARTITIONS PA_ADRR1 VALUES('广东') TABLESPACE SP1,
        SUBPARTITIONS PA_ADRR2 VALUES('广西') TABLESPACE SP1
     )
      PARTITION PA_ID2 VALUES LESS THAN(MAXVALUE) TABLESPACE SP1
     (
        SUBPARTITIONS PA_ADRR3 VALUES('广东') TABLESPACE SP1,
        SUBPARTITIONS PA_ADRR4 VALUES('广西') TABLESPACE SP1
     )
     )     
     
     --拆分分区(sblit)
     alter table tb_name sblit partition p2 at () into (partition p11,partition p22);
     ALTER TABLE SALES SBLIT PARTITION P2 AT(TO_DATE('2003-02-01','YYYY-MM-DD')) INTO (PARTITION P21,PARTITION P22);
     --合并分区、MERGE(融入的意思)
     alter table tb_name merge partitions sp1,sp2 into partition sp2;
     ALTER TABLE TB_NAME MERGE PARTITIONS SP1,SP2 INTO PARTITION SP2;
     --接合分区(只用于散列分区中)(coalesca)
     alter table tb_name coalesca partitiion;
     ALTER TABLE SALES COALESCA PARTITION;
     --重名名分区(rename partition...to...)
     alter table tb_name rename partition sp1 to sp2;
     --查询某个表存在的分区信息
     select * from user_tab_partitions where table_name='tb_name';
     --使用union实现跨分区查询
     
     
     
     --alter table tab_name truncate partition p_name; 清除表中某个分区的信息(截断分区 )
     
     
     
     
     --練習
     --查看表分區信息
     select * from user_tab_partitions where table_name='stues';
     
     --班級表
     create table classes (
     cid number(6) primary key,
     cnum number(10) unique,
     cname varchar(10) not null,
     cmax_age number(2),
     cmin_age number(2),
     csex number(1) default 1--性別1女2男
     
     )
     partition by list(csex)(
     partition class_sex_l01 values(1) tablespace users,
     partition class_sex_l02 values(2) tablespace users
     )
     
     select * from classes partition(class_sex_l01);


     --學生表
     create table stues (
         sid number(6),
         snum number(10),
         sname varchar(10) not null,
         sage number(2),
         ssex number(1) default 1,
         scid number(6),
         constraint pk_con primary key(sid),
         constraint un_con unique(snum),
         constraint ck_age_con check (sage between 1 and 99),
         constraint ck_sex_con check (ssex between 1 and 2),
         constraint fk_con foreign key(scid) references classes(cid) 
         ) partition by range(sage)(
         partition class_age_r01 values less than(30) tablespace users,
         partition class_age_r02 values less than(60) tablespace users,
         partition class_age_r03 values less than(99) tablespace users
         )


         select * from stues partition(class_age_r02);
         
         select to_date(2454084+TRUNC(DBMS_RANDOM.VALUE(0,365)),'J') from dual;
         
         select cast('123' as number(5)) from dual;
         select cast(dbms_random.value as varchar2(38)) from dual;
         
         
       --根据区分表空间建表(例子)
      CREATE TABLE MYDB
      (SID NUMBER(2) PRIMARY KEY,
           SNAME CHAR(5) NOT NULL,
           SPHONE NUMBER(11) NULL,
           SADDR VARCHAR2(10) DEFAULT '广东')
           PARTITION BY LIST (SADDR)--列表分区
           (PARTITION PA_ADD1 VALUES ('广东') TABLESPACE SYSTEM,
            PARTITION PA_ADD2 VALUES ('广西') TABLESPACE USERS
           )
           
      ALTER TABLE MYDB 
            MODIFY (SNAME VARCHAR2(10) );     
      ALTER TABLE MYDB 
            MODIFY (SADDR DEFAULT '广东广州' );  
      ALTER TABLE MYDB
            MOVE TABLESPACE USERS;--移动表到其他表空间(索引会失效!)

      select * from user_tab_partitions where table_name='mydb'; --查看表的分區信息   
               
       
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不知道叫什麽名字

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值