TABLESPACE ORCLTBS1, PARTITION p2 VALUES LESS THAN
(TO_DATE('1990-1-1', 'YYYY-MM-DD')) TABLESPACE ORCLTBS2,
PARTITION p3 VALUES LESS THAN(MAXVALUE) TABLESPACE ORCLTBS3 STORAGE(INITIAL 10M NEXT 20M))
STORAGE(INITIAL 20M NEXT 10M MAXEXTENTS 10 );
(2)列表分区 概述
如果分区列的值并不能划分范围(非数值类型或日期类型),同时分区列的取值范围只是一个包含少数值的集合,则可以对表进行列表分区(LIST),如按地区、性别等分区。
通过PARTITION BY LIST子句说明根据列表进行分区,其后括号中列出分区列。每个分区以PARTITION 关键字开头,其后是分区名。VALUES子句用于设置分区所对应的分区列取值。 示例
创建一个分区表,将学生信息按性别不同进行分区,男学生信息保存在表空间ORCLTBS1中,而女学生信息保存在ORCLTBS2中。 CREATE TABLE student_list(
sno NUMBER(6) PRIMARY KEY, sname VARCHAR2(10),
sex CHAR(2) CHECK(sex in ('M', 'F')) )
PARTITION BY LIST(sex)
(PARTITION student_male VALUES('M') TABLESPACE ORCLTBS1, PARTITION student_female VALUES('F') TABLESPACE ORCLTBS2 );
(3)散列分区 概述
散列分区(HASH)是在指定数量的分区中均等地分配数据。
为了创建散列分区,需要指定分区列、分区数量或单独的分区描述。
通过PARTITION BY HASH指定分区方法,其后的括号指定分区列。使用PARTITION子句指定每个分区名称和其存储空间。或者使用PARTITIONS子句指定分区数量,用STORE IN子句指定分区存储空间。 示例
创建一个分区表,根据学号将学生信息均匀分布到ORCLTBS1和ORCLTBS2两个表空间中。 CREATE TABLE student_hash (
sno NUMBER(6) PRIMARY KEY, sname VARCHAR2(10) )
PARTITION BY HASH(sno)
(PARTITION p1 TABLESPACE ORCLTBS1, PARTITION p2 TABLESPACE ORCLTBS2 );
CREATE TABLE student_hash2 (
sno NUMBER(6) PRIMARY KEY, sname VARCHAR2(10) ) PARTITION BY HASH(sno)
PARTITIONS 2 STORE IN(ORCLTBS1,ORCLTBS2);
(4)复合分区 复合分区包括: 范围-列表复合分区 范围-散列复合分区。
创建复合分区时需要指定:
分区方法(PARTITION BY RANGE) 分区列
子分区方法(SUBPARTITION BY HASH,SUBPARTITION BY LIST) 子分区列
每个分区中子分区数量或子分区的描述。
范围-列表复合分区
范围-列表复合分区先对表进行范围分区,然后再对每个分区进行列表分区,即在一个范围分区中创建多个列表子分区。 示例:
创建一个范围-列表复合分区表,将1980年1月1日前出生的男、女学生信息分别保存在ORCLTBS1和ORCLTBS2表空间中,1980年1月1日到1990年1月1日出生的男、女学生信息分别保存在ORCLTBS3和ORCLTBS4表空间中,其他学生信息保存在ORCLTBS5表空间中。
CREATE TABLE student_range_list( sno NUMBER(6) PRIMARY KEY,
sname VARCHAR2(10), sex CHAR(2) CHECK(sex IN ('M','F')), sage NUMBER(4), birthday DATE )
PARTITION BY RANGE(birthday) SUBPARTITION BY LIST(sex)
(PARTITION p1 VALUES LESS THAN(TO_DATE('1980-1-1', 'YYYY-MM-DD')) (SUBPARTITION p1_sub1 VALUES('M') TABLESPACE ORCLTBS1, SUBPARTITION p1_sub2 VALUES('F') TABLESPACE ORCLTBS2), PARTITION p2 VALUES LESS THAN(TO_DATE('1990-1-1', 'YYYY-MM-DD')) (SUBPARTITION p2_sub1 VALUES('M') TABLESPACE ORCLTBS3, SUBPARTITION p2_sub2 VALUES('F') TABLESPACE ORCLTBS4), PARTITION p3 VALUES LESS THAN(MAXVALUE) TABLESPACE ORCLTBS5
);
范围-散列复合分区
范围-散列复合分区先对表进行范围分区,然后再对每个分区进行散列分区,即在一个范围分区中创建多个散列子分区。 示例:
创建一个范围-散列复合分区表,将1980年1月1日前出生的学生信息均匀地保存在ORCLTBS1和ORCLTBS2表空间中,1980年1月1日到1990年1月1日出生的学生信息保存在ORCLTBS3和ORCLTBS4表空间中,其他学生信息保存在ORCLTBS5表空间中。 CREATE TABLE student_range_hash( sno NUMBER(6) PRIMARY KEY, sname VARCHAR2(10), sage NUMBER(4), birthday DATE )
PARTITION BY RANGE(birthday) SUBPARTITION BY HASH(sage)
(PARTITION p1 VALUES LESS THAN(TO_DATE('1980-1-1', 'YYYY-MM-DD')) (SUBPARTITION p1_sub1 TABLESPACE ORCLTBS1,
SUBPARTITION p1_sub2 TABLESPACE ORCLTBS2), PARTITION p2 VALUES LESS THAN(TO_DATE('1990-1-1', 'YYYY-MM-DD'))
(SUBPARTITION p2_sub1 TABLESPACE ORCLTBS3, SUBPARTITION p2_sub2 TABLESPACE ORCLTBS4), PARTITION p3 VALUES LESS THAN(MAXVALUE) TABLESPACE ORCLTBS5 );
5. 簇的管理 (1)创建簇
在数据库中,簇占据实际的存储空间,因此用户必须具有足够的表空间配额。 例:
CREATE CLUSTER student_class ( class_id NUMBER(3)) SIZE 600
TABLESPACE users
STORAGE (INITIAL 200K NEXT 300K MINEXTENTS 2 MAXEXTENTS 20); (2)创建聚簇表
在簇中创建的表称为“聚簇表”。通过将两个或多个聚簇表保存在同一个簇中,可以将两个表中具有相同的聚簇字段值的记录集中存放在同一个数据块(或相邻的多个数据块)中。 在CREATE TABLE语句中通过CLUSTER子句来指定表所使用的簇和聚簇字段。 聚簇表中的聚簇字段必须与创建簇时指定的聚簇字段具有相同的名称和数据类型。 SQL> CREATE TABLE classes(
class_id NUMBER(3) PRIMARY KEY, cname VARCHAR2(10) )
CLUSTER student_class (class_id);
SQL> CREATE TABLE students (
sno NUMBER(5) PRIMARY KEY, sname VARCHAR2(15) NOT NULL,
class_id NUMBER(3) REFERENCES classes) CLUSTER student_class(class_id); (3)创建聚簇索引
可以为簇中的聚簇字段创建索引,这种类型的索引称为“聚簇索引”。 例如,为簇student_class创建一个聚簇索引。 CREATE INDEX student_class_index ON CLUSTER student_class TABLESPACE USERS
STORAGE (INITIAL 10K NEXT 10K MINEXTENTS 2 MAXEXTENTS 10) PCTFREE 10; (4)删除簇
删除簇的同时将删除聚簇索引。根据簇中是否包含表,簇删除可以分为下列3种情况。 使用DROP CLUSTER删除不包含聚簇表的簇及簇索引。 DROP CLUSTER student_class;
使用DROP CLUSTER...INCLUDING TABLES语句删除包含聚簇表的簇。 DROP CLUSTER student_class INCLUDING TABLES;
如果聚簇表中包含其他表外键参考的主键约束列或唯一性约束列,则需要使用CASCADE CONSTRAINTS子句删除约束,同时删除簇。
DROP CLUSTER student_class INCLUDING TABLES CASCADE CONSTRAINTS;
6.视图的管理 (1)创建视图 语法
CREATE [OR REPLACE] [FORCE| NOFORCE] VIEW [schema.]view_name[(column1,column2,…)] AS subquery
[WITH READ ONLY]|[WITH CHECK OPTION] [CONSTRIANT constraint]; (2)删除视图
使用DROP VIEW语句删除视图。
7.序列的管理
序列用于产生惟一序号的数据库对象,用于为多个数据库用户依次生成不重复的连续整数。通常使用序列自动生成表中的主键值。 (1)创建序列 语法:
CREATE SEQUENCE sequence [INCREMENT BY n] [START WITH n]
[MAXVALUE n | NOMAXVALUE]
[MINVALUE n | NOMINVALUE] [CYCLE | NOCYCLE] [CACHE n | NOCACHE]; 参数说明:
INCREMENT BY:设置相邻两个元素之间的差值,即步长,默认值为1; START WITH:设置序列初始值,默认值为1; MAXVALUE:设置序列最大值
NO MAXVALUE:设置默认情况下,递增序列的最大值为1027,递减序列的最大值为-1; MINVALUE:设置序列最小值;
NOMINVALUE:设置默认情况下,递增序列的最小值为1, 递减序列的最小值为-1026; CYCLE|NOCYCLE:指定当序列达到其最大值或最小值后,是否循环生成值,NOCYCLE 是默认选项;
CACHE|NOCACHE:设置是否在缓存中预先分配一定数量的数据值,以提高获取序列值的速度,默认为缓存20个值。 例:
CREATE SEQUENCE stud_sequence INCREMENT BY 1 START WITH 100 MAXVALUE 1000;
(2)修改序列 说明
除了不能修改序列起始值外,可以对序列其他任何子句和参数进行修改。 例如,修改序列stud_sequence的设置。 ALTER SEQUENCE stud_sequence INCREMENT BY 10
MAXVALUE 10000 CYCLE CACHE 20;
(3)删除序列
可以使用DROP SEQUENCE语句删除序列。 例如,删除序列stud_sequence。 DROP SEQUENCE stud_sequence;
8. 同义词管理
同义词是数据库中表、索引、视图或其他模式对象的一个别名。 (1)创建同义词 语法:
CREATE [PUBLIC] SYNONYM synonym_name FOR object_name; 例如:
CREATE PUBLIC SYNONYM scottemp FOR scott.emp; (2)删除同义词 语法:
DROP [PUBLIC] SYNONYM synonym_name; 例如: