数据类型:
字符类型:char,最大长度2000字节,最小长度为1字节;varchar 用于存储可变长度的字符串
数值类型:number[(m,n)]用于存储整数和实数,m表示数值的总位数(精度),取值范围为1-38,默认为38;n表示小数位数,若为复数则表示把数据向小数点左边舍入,默认值为0
日期类型:date存储日期和时间;timestamp[(n)]时间戳,date的扩展,允许小数的秒值,n表示小数位数,取值范围0-9,默认值为6
lob类型:clob存储可变长度的字符,最大128TGB,blob存储大型,未被结构化的可变长度的二进制数据,bfile存储指向二进制格式文件的定位器,二进制文件保存在数据库外部的操作系统,最大128TGB
二进制类型:raw(n)可变长度的二进制数据,1-2000;longraw可变长度的二进制数据,最大2GB
表的完整性约束:
primary key约束:可以定义为列级约束也可以定义为表级约束
unique约束:唯一性约束,列中不允许出现重复的值
check约束:检查约束,限制列所允许的取值范围,一个列可以定义多个check约束
foreign key 约束:约束列的取值要么是主参照的值,要么为空,可以定义列级约束也可以定义表级约束
not null约束:非空约束
列级约束与表级约束:
表级约束:对多个列一起进行约束,定义表级约束时列出约束列的名称
列级约束:对特定列的约束
创建表:
SQL>CREATE TABLE teacher ( tea_no number(6), tea_name varchar2(10), tea_age number(3), tea_sex char(2), tea_address varchar2(100) );
添加约束:ALTER TABLE 语句
ALTER TABLE table_name ADD [CONSTRAINT constraint_name] constraint_type (column1_name,column2_name,...)[condition]
添加改表约束:
ALTER TABLE teacher add constraint t_pk primary key (tea_no); ALTER TABLE teacher add constraint t_uk unique (tea_name); ALTER TABLE teacher add constraint t_ck check(tea_sex IN ('M','N')); ALTER TABLE teacher MODIFY tea_address NOT NULL;
删除约束:ALTER TABLE ... DROP
1.删除指定内容的约束 ALTER TABLE teacher DROP UNIQUE (tea_name); 2.删除制定名称的约束 ALTER TABLE teacher DROP CONSTRAINT t_ck; 3.删除制定名称的约束 ALTER TABLE teacher DROP CONSTRAINT t_pk CASCADE
约束信息查询:
数据字典视图包all_constraint、user_constraint、dba_constraint含了表中约束的详细信息,约束名称、类型、状态可以查询表中所有约束的相关信息,数据字典视图all_cons_columns、user_cons_columns和dba_cons_columns包含了定义约束的列信息,可以查询约束所作用的列的信息
修改表:
添加l列:
ALTER TABLE table_name ADD ( new_column_name datetype [default value] [NOT NULL]);
修改列类型:
ALTER TABLE table_name MODIFY column_name new_datatype;
修改列名称:
alter table TABLE_NAME rename column column_old to column_new;
删除列:
ALTER TABLE table_name DROP [COLUMN column_name ] |[(column1_name, ,...)]
保留表,只删除数据: truncate table mytable; delete from student where 1 = 1 ; ---删除表本身: drop table mytable; ---永久性删除 恢复不了: drop table mytable purge;
删除表:
DROP TABLE table_name [CASCADE CONSTRAINTS]
索引管理
索引的概念:索引是建立在表列上的数据库对象,它是对表的一列或多列进行排序的结构,用于提高数据的查询效率,如果一个表没有创建索引,查询时将会扫描全表
创建索引:
CREATE [UNIQUE] | [BITMAP] INDEX index_name ON table_name ([column_name [ASC |DESC],...] | [expression]) [REVERSE] [parameter_list];
删除索引:
DROP INDEX index_name
分区表与分区索引管理
分区技术是Oracle数据库对巨型表或巨型索引进行管理和维护的重要技术,将巨型表或巨型索引分成若干个独立的组成部分进行存储和管理,对每一个相对小可以独立管理的部分称为原来表或索引的分区。分区通过将操作分配给更小的单元,减小了需要进行管理操作的时间,通过增强的并行处理提高了性能,屏蔽故障数据的分区,增加了可用性,对巨型表进行分区后既可以对整个表进行操作们也可以针对特定的分区进行操作,简化对表的管理和维护
创建分区表
Oracle可以创建四种类型的分区:范围分区、列表分区、散列分区、复合分区,如果表中含有long或long raw类型的列,则不能对表进行分区
1.范围分区:按照分区列值的范围来作为分区的条件,创建分区是要制定基于的列,以及分区的范围值。创建一个分区表emp_range ,将员工信息根据其工资进行分区:
SQL>CREATE TABLE emp_range( emp_no NUMBER(4) PRIMARY KEY, emp_name VARCHAR2(10), hireday DATE, sal NUMBER(7,2), job VARCHAR2(10), ) PARTITION BY RANGE (sal) ( PARTITION p1 VALUES LESS THAN (2000) TABLESPACE oralltas1 PARTITION p2 VALUES LESS THAN (5000) TABLESPACE oralltas2 PARTITION p3 VALUES LESS THAN (MAXVALUE) TABLESPACE oralltas3 )
// 将工资低于2000元的员工信息保存在oralltbs1表空间中,2000-5000保存在oralltbs2中,5000以上保存在oralltbs3中
2.列表分区:用来分区的列值不能划分范围,分区的取值范围只是一个包含少数值的集合,满足这两个条件就可以对表进行列表分区,如地区、性别、部门号
SQL>CREATE TABLE emp_list( emp_no NUMBER(4) PRIMARY KEY, emp_name VARCHAR2(10), dept_no NUMBER(2), sal NUMBER(7,12), job VARCHAR2(10); ) PARTITION BY LIST (dept_no) ( PARTITION p1 VALUES(10) TABLESPACE oralltbs1, PARTITION p2 VALUES(10) TABLESPACE oralltbs2, PARTITION p3 VALUES(10) TABLESPACE oralltbs3, PARTITION p4 VALUES(10) TABLESPACE oralltbs4, );//根据部门编号进行分区
3.散列分区:均等分配:指定分区列、分区数量或单独的分区描述
SQL>CREATE TABLE emp_hash( emp_no NUMBER(4) PRIMARY KEY, emp_name VARCHAR2(10), age INT ) PARTITION BY HASH (emp_no) ( PARTITION p1 TABLESPACE oralltbs1, PARTITION p2 TABLESPACE oralltbs2, );//根据员工号将员工信息均分到oralltbs1、oralltbs2
4.组合分区:同时使用两种方法进行分区,Oracle支持范围-列表和范围-散列的组合,先进行范围分区
SQL>CREATE TABLE emp_rang_list( emp_no NUMBER(4) PRIMARY KEY, emp_name VARCHAR2(10), dept_no NUMBER(2), sal NUMBER(7,12), job VARCHAR2(10) ) PARTITION BY RANG(sal) SUBPARTITION BY LIST (dept_no) (PARTITION p1 VALUES LESS THAN (5000) (SUBPARTITION p1_sub1 VALUES (10) TABLESPACE oralltbs1, SUBPARTITION p1_sub2 VALUES (10) TABLESPACE oralltbs2, SUBPARTITION p1_sub3 VALUES (10) TABLESPACE oralltbs3, SUBPARTITION p1_sub4 VALUES (10) TABLESPACE oralltbs4,) PARTITION p2 VALUES LESS THAN (MAXVALUE) ( SUBPARTITION P2_sub1 VALUES(10) TABLESPACE oralltbs5,SUBPARTITION SUBPARTITION P2_sub2 VALUES(10) TABLESPACE oralltbs6,SUBPARTITION SUBPARTITION P2_sub3 VALUES(10) TABLESPACE oralltbs7,SUBPARTITION SUBPARTITION P2_sub4 VALUES(10) TABLESPACE oralltbs8,SUBPARTITION );//范围-列表复合分区表