oracle数据库(二)

oracle数据库模式对象

模式对象就是存储在用户模式下的数据库对象,Oracle数据库中的模式对象包括表、视图、索引、同义词、序列等,其中表用于存储用户数据,索引用于提高数据的检索效率,视图用于从一个或多个表中导出常用的数据,序列用于自动生成列值,同义词为对象定义别名。

本文重点:

1.表和表的完整性约束

2.了解索引

3.掌握视图的使用

4.了解序列

5.了解同义词

 

一.表和表的完整性约束

1)创建表

create table person (

id number(4),

name varchar2(8),

sex char(2),

birthday date

)tablespace myspace;

2)管理表中的列

分别为增加、删除、修改列

alter table person add email varchar2(20);

alter table person drop email;

alter table person rename brithday to age;修改列名。

alter table person modify age number(4);修改列数据类型。

3).使用unused关键字

列设置为unused后,变为不可用状态,但数据仍然保存在数据库中,形式上相当于被删除了。

alter table person set unused (age);

4).表的完整性约束

为了对用户输入的数据进行检验,我们对表中的列进行了约束,完整性约束有NOT NULL、UNIQUE、PRIMARY KEY、FOREGIN KEY、CHECK约束。

NOT NULL非空约束:alter table person modify id not null;

删除非空约束:alter table person modify id null;

UNIQUE约束:alter table person add unique (name);UNIQUE约束允许存在多个NULL值。

删除UNIQUE约束:alter table person drop constraint constraint_name;

constraint_name代表约束名字,如果我们添加UNIQUE约束是这样的alter table person add constraint hello unique(name);,那么我们删除UNIQUE约束就有约束名了,如果没有添加约束名,我们可以用数据字典user_cons_columns和user_constraints来查看约束名称。

PRIMARY KEY主键约束:alter table person add constraint kkk primary key(id);我们设置id为主键并为约束起名kkk。

删除PRIMARY KEY:alter table person drop constraint kkk;

CHECK约束:alter table person add constraint o check (sex in ('男','女'));

FOREGIN KRY约束:有两种添加外键方式

1.alter table table_name1 add constraint constraint_name foregin key (column_name1) references table_name2(column_name2);

2.creat table book(

 bid number(4) primary key,

bname varchar2(20) not null,

tid number(4),

constraint book_type foregin key (tid) references type (tid)

);

注意:我们使用外键约束,可以定义级联操作CASCADE、SET NULL、NO ACTION。默认NOT ACTION,当删除主表时,如果字表外键值包括主键值,则禁止此操作。

CASCADE代表删除主表被引用的列数据,级联删除字表对应的行。SET NULL代表删除主表被引用的列时,字表对应的列值设置为NULL.

5)约束的状态

约束状态有四种禁用和激活、验证和不验证。

ENABLE VALIDATE:对以后插入的数据进行约束检查,并对表中已经存在的数据进行约束检查。默认此状态。

ENABLE NOVALIDATE:对以后插入或更新的数据进行约束检查,对表中已经存在的数据不进行约束检查。

DISABLE VALIDATE:禁止添加更新数据:

DISABLE VALIDATE:对以后插入和更新数据和已经在表中的数据都不进行约束检查。

二.索引

索引是数据库中用于存放表中每一条记录的位置对象,主要目的是为了加快数据的读取速度和完整性检查。但是索引会占用许多存储空间,删除和更新索引会增加数据库的开销。

首先明白为什么索引会增加速度,DB在执行一条Sql语句的时候,默认的方式是根据搜索条件进行全表扫描,遇到匹配条件的就加入搜索结果集合。如果我们对某一字段增加索引,查询时就会先去索引列表中一次定位到特定值的行数,大大减少遍历匹配的行数,所以能明显增加查询的速度。

添加索引的话,首先去索引列表中查询,而我们的索引列表是B类树的数据结构,查询的时间复杂度为O(log2N),定位到特定值得行就会非常快,所以其查询速度就会非常快。

索引类型:B数索引、基于函数的索引、位图索引。

创建索引:create index index_name on person (name);

三.视图

视图不占存储空间,也不存储任何实际数据,它的数据来自它的子查询中的引用的表,只是在数据字典中定义它的信息。

创建视图:create view view_name as select empno,ename,job,sal,depton from emp where sal >1000;

查询视图:select * from view_name;

对视图进行DML操作(增加、删除、修改),首先视图只支持没有进行过函数和数学运算的列进行操作。

insert into view_name(empon,ename,job,deptno) values(6000,'xiaoming','ss',20);

使用with check option子句,可以限定对视图进行DML操作必须符合子查询条件。

使用with read only子句限制只能对视图进行读操作,不能进行写操作,因为视图结构和基表结构息息相关。

删除视图:drop view view_name;

四.序列

序列的和试图一样不占内存空间,可以为主键提供唯一值,有序值。

创建序列:

create sequence sequence_name 

start with 1

increment by 1

nocache

nocycle

order;

使用序列:两个伪列Currval和nextval。

我们创建一个表student

create table student(

id number(20)primary key ,

name varchar2(20) not null

);

向表中添加值,使用前面创建的序列sequence_name,为id自动赋值。

insert into student(id,name)values(sequence_name,'xiaoming');

insert into student(id,name)values(sequence_name,'xiaowang');

这样id就会自动赋值为1,2。

五.同义词

创建同义词,起别名。

create public synonsy_name  for schema_object; 

posted @ 2018-08-08 17:03  执棋手  阅读(187)  评论(0编辑  收藏  举报