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)
);