Oracle表

创建表的策略 

       Oracle表由堆表、外部表、索引组织表、临时表、对象和对象表、分区表、簇表和散列表。 

堆表

      堆表是最常使用的普通表,数据的存储没有顺序,当增加数据时会使用Oracle找到的第一个合适空间。 

语句:

--创建堆表
create table 表名(
  字段名1 字段类型(长度) 是否为空,
  字段名1 字段类型(长度) 是否为空
)
tablespace TSDAT02                                         
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );

--增加主键
alter table 表名 add constraint 主键名 primary key (字段名);

--增加外键
alter table 表名 add constraint 外键名 foreign key (字段名) references 关联表 (字段名);

--增加列
alter table 表名 add 字段名 类型;

--修改列
alter table 表名 modify 字段名 类型;

--给列增加注释
comment on column 表.字段名 IS '注释';

--修改列名
alter table 表名 rename cloumn 旧列名 to 新列名;

--修改表名
rename 表名 to 新表名;

--删除列名
alter table 表名 drop column 字段名;

--删除表数据
truncate table 表名;
delete from 表名;

--删除表
drop table 表名;

复制代码
分区表

      在大型数据库应用程序中,用户需要处理的数据量很大。为使用户的读、写操作和查询操作更快,Oracle提供了分区表。分区表是将一个非常大的表划分成小块(分区)。在实际应用中,对分区表的操作是在独立的分区上,但是对用户而言分区表就像一个表一样工作。

      Oracle数据库提供了5种对表或索引的分区方法:范围分区、散列分区、列表分区、组合范围分区和组合范围列表分区。每种分区都有自己的特点。

范围分区

    范围分区表中的数据是一个值的范围,根据值的大小或序列,决定数据村塾的分区,例如,根据日期值的分区,即根据不同范围的日期,将表中的数据存储在不同的分区。
create table t47_transaction(
       id varchar2(20) primary key,
       item varchar2(300),
       dt date not null,
       state varchar2(20))
       partition by range (id) (
       partition part_01 values less than (10000) tablespace users,
       partition part_02 values less than (30000) tablespace sysaux,
       partition part_03 values less than (maxvalue) tablespace system
);
--使分区根据编号分为3个区,,第一个分区存储10000条数据,第二个分区存储20000条数据,
--其余的数据将被存储在第三个分区上
复制代码

散列分区

      散列分区是通过散列算法 均匀分布数据的一种分区类型。通过在I/O设备上进行散列分区可以使得这些分区大小一致。

--根据id散列地存放在指定的3个表空间中
create table t47_transaction(
       id varchar2(20) primary key,
       item varchar2(300),
       dt date not null,
       state varchar2(20))
       partition by hash (id) (
       partition part_01 tablespace users,
       partition part_02 tablespace sysaux,
       partition part_03 tablespace system
);
复制代码

列表分区

      如果分区的值使非数字或日期数据类型,并且分区列的取值范围只是一个包含少数值的集合,则可以对表进行列表分区,需要为每个分区指定一个取值列表,分区列的取值处于同一个取值列表中的行被存储在同一分区中

--根据交易地点将表进行分区
create table t47_transaction(
       id varchar2(20) primary key,
       item varchar2(300),
       dt date not null,
       state varchar2(20))
       partition by list (state) (
       partition part_01 values ('北京', '天津') tablespace users,
       partition part_02 values ('周口', '郑州') tablespace sysaux
);
复制代码

组合范围散列分区

      根据范围分区后,有时也需要将每个分区的数据分布在散列的几个表空间中,使范围分区形成组合范围散列分区。

--按时间分区,每个分区的数据可以3个子分区,以便数据散列地存储在表空间的指定空间内
create table t47_transaction(
       id varchar2(20) primary key,
       item varchar2(300),
       dt date not null,
       state varchar2(20))
       partition by range (dt)
       subpartition by hash (id)
       subpartitions 3 store in (users, sysaux, system) (
       partition part_01 values less than (date'2017-06-22'),
       partition part_02 values less than (date'2018-06-22'),
       partition part_03 values less than (maxvalue)
);
复制代码

组合范围列表分区

      组合范围列表分区将范围分区和列表分区技术组合,首先进行范围分区,然后对每个单独的范围分区使用列表分区技术进一步细分。与组合范围散列分区不同,组合范围列表分区中每个子分区的内容表示数据的逻辑子集,由适当的范围和列表分区设置来描述。

--将表分为两个分区,然后再对每个分区以列表分区形式进行子分区
create table t47_transaction(
       id varchar2(20) primary key,
       item varchar2(300),
       dt date not null,
       state varchar2(20))
       partition by range (id)
       subpartition by list (state) (
       partition part_01 values less than (10000) (
                 subpartition part_01_1 values ('北京', '天津') tablespace users,
                 subpartition part_02_1 values ('周口', '郑州') tablespace sysaux),
       partition part_02 values less than (maxvalue) (
                 subpartition part_01_2 values ('北京', '天津') tablespace users,
                 subpartition part_02_2 values ('周口', '郑州') tablespace sysaux)
);
复制代码

再补充两个很好的分区博文:

blog.csdn.net/tanzuai/art…

blog.csdn.net/liang_henry…

转载于:https://juejin.im/post/5b2d0f4a51882574ec30a373

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值