约束、视图、序列、伪列和索引

原创
2016-06-07 15:56:06 764浏览

前言 约束条件用于保证数据的完整性。主要有主键约束(primary key)/非空约束(not null)、唯一约束(unique) 检查约束(check)和外键约束(foreign key). 正文 约束 主键约束(primary key) 主键约束包含了非空和唯一 create table 表名(字段名 字段

前言

约束条件用于保证数据的完整性。主要有主键约束(primary key)/非空约束(not null)、唯一约束(unique) 检查约束(check)和外键约束(foreign key).

正文

约束

主键约束(primary key)

主键约束包含了非空和唯一

create table 表名(字段名 字段类型(长度) 约束条件);

1.创建自定义名称约束

create table 表名(字段名 字段类型(长度),constraint 约束名 约束类型(字段名));

注:可以通过user_constraints数据字典来查询约束。

非空约束(not null)

检查约束(check)

create table t_test(id number(10);sex char(2); constraint test_sex check (sex in('男',‘女’)));--可以通过在字段后面加 default 值,来设置默认值;在使用默认值时使用default关键字。

注:元组上的约束的定义

元组级别的限制可以设置不同属性之间取值的相互约束条件

check(ssex='女' or sname NOT like 'MS.%');--当学生性别为男时,其名字不能以MS.开头。

外键约束(foreign key 字段名 references 表名(字段名)).

外键字段可以为空,或者引用自依赖的父项。

设置级联

1.赋予空值

foreign key(外键字段) references 表名(字段) on delete set null;

2.级联删除

foreign key(外键字段) references 表名(字段) on delete cascade;

联合主键

constraint pk_t_emp primary key (字段1,字段2);

DDL操作约束

alter table 表名 drop contraints 约束名称;

alter table 表名 add contraints 约束名称 约束类型(字段);

alter table 表名 modify (字段 字段类型 要添加的约束);

视图

create or replace view 视图名 as select * from emp;

注:

复杂视图的定义是,视图中的数据不能直接通过表获得,必须通过计算来获得;复杂视图的查询字段必须取别名。

序列

序列是数据库中特有的一组能够实现自动增长的数字。

create sequence 序列名 increment by 每次增长的步长 start with 起始值。

1.select 序列名.nextval from dual.--获取序列的下一个值;获取序列的当前值采用currval属性。

伪列

oracle特有的默认提供给每一个表的,以便实现某些功能。

rownum

表示每条记录的序号(查到结果集后才分配的序号),常常用于分页。

rowid

表示每条记录的唯一标识(一组32为的字符串),可用来获取记录的物理地址

应用于分页

1.三目运算来计算总页数 totalpage=sum/pagesize+sum%pagesize==0?0:1;//计算总页数,sum为总记录数

2.第page页的记录的起始位置和结束位置分别为:

pagesize*(page-1)+1;起始位置

pagesize*page;j、结束位置

注:

1.可以使用差集(minus)在数据库查询中实现分页,但效率低'

2.常用子查询将rownum作为另一结果集的字段来实现分页。

select ee.* from(select e.* , rownum rr from (select * from emp where sal is not null order by sal ) e )ee where ee.rr berween &start and &end;

3.rownum的分页地java代码示例

索引

快速的查找定位到某条记录(底层采用rowid来实现);没有索引查找时,将采用全表扫描(full table scan)

注:

1.查找索引可以使用user_indexes数据字典。

2数据库.默认为表中的主键和唯一键建立索引。

自定义索引

create index 索引名 on 表名(字段名);

不应该应用索引的情况

1.经常进行更新操作的字段

2.表小,查询结果集大

3.不常用的字段

应用索引的情况

1.经常用来查询的字段

2.当表的数据量很大且查询的结果集较小

3.当前字段值很多为空的字段

4.经常用来作为联合查询的字段

5.外键字段

数据字典

存储描述对象(表,序列、视图、触发器、过程、函数等)信息的表或视图称为数据字典。

user_XXX 表示当前用户的相关信息的数据字典

user_tables/user_constraints/user_indexes/user_sequences/user_views/user_objects

例如:select distinct object——type from user_objects;--查看所有的对象

user_all_XXX 当前用户所能访问的对象的数据字典

dba_xxx 当前数据库下得所有对象的数据字典

总结

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。