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;