欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

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

程序员文章站 2022-04-18 16:45:54
...

前言 约束条件用于保证数据的完整性。主要有主键约束(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 当前数据库下得所有对象的数据字典

总结