博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle篇--05 Oracle 视图、序列、约束
阅读量:1887 次
发布时间:2019-04-26

本文共 4303 字,大约阅读时间需要 14 分钟。

1.视图

视图也被称为虚表,即虚拟的表,是一组数据的逻辑表示。视图对应于一条SELECT语句,结果集被赋予一个名字,即视图名字。视图本身并不包含任何数据,它只包含映射到基表的一个查询语句,当基表数据发送变化,视图数据也会发生变化。

视图是数据库对象之一,所有数据库对象名字不能重复,所有视图名字都是以“v_”开头的.视图在SQL语句中体现的角色与表相同,但是视图并不是一张真实存在的表,而是对于一个SELECT语句的查询结果集,并将其当做表看待而已。使用视图的目的是简化SQL语句的复杂度,重用了查询,限制数据访问。

创建一个简单视图V_EMP_10来显示部门10中的员工的编码、姓名和薪水CREATE VIEW v_emp_10ASSELECT empno,ename,sal,depno from emp where deptno=10查看视图结构:DESC v_emp_10;

修改视图:

由于视图仅对应一个SELECT语句,所以修改视图就是替换该SELECT语句而已。

视图的作用:

如果需要经常执行某项复杂查询,可以基于这个复杂查询建立视图,此后查询此视图即可,简化复杂查询。

视图本质上就是一条SELECT语句,所以当访问视图时,只能访问到所对应的SELECT语句中设计到的列,对基表中的其它列起到安全和保密的作用,限制数据访问。

 

对视图的DML操作就是对基表操作,那么操作不当可能对基表进行数据污染。

为视图添加检查选项,可以保证对视图的DML操作后视图对其可见,否则不允许进行该DML操作,这样就避免了对基表进行污染。

2.序列

序列是一种用来生成唯一数字值的数据库对象。序列的值由Oracle程序按递增或递减顺序自动生成,通常用来自动产生表的主键值,是一种高效率获得唯一键值的途径。序列是独立的数据库对象,和表时独立的对象,序列并不依附于表。通常情况下,一个序列为一个表提供主键值,但一个序列也可以为多个表提供主键值。

序列也是数据库对象之一,作用是生成一系列数字,序列常用于为某张表的关键字段提供值使用。

序列支持两个伪列:

NEXTVAL:获取序列下一个值;若是新创建的序列,那么第一次调用返回的是START WITH指定的值,以后每次调用都会得到当前序列值加上步长后的数字。NEXTVAL会导致序列发生步进,且序列不能回退。

CURRVAL:获取序列当前值,即:最后一次调用CURRVAL后得到的值,CURRVAL不会导致步进。但是新创建的序列至少调用一次NEXTVAL后才可以使用CURRVAL。

3.索引

java 编程中索引是对数据库表中一列或多列的值进行排序的一种结构(B树-平衡多叉树)。

创建索引可以大大提高系统的性能。
第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因。
第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
第四,在使用分组和排序子句进行时,同样可以显著减少查询中分组和排序的时间。
第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能

4.约束

 

约束的功能:约束某列的数据,实现一些业务的规则,防止无效的数据进入数据库,按照约束的条件的数据才能写入数据库,保证了数据的完整性,进一步解决,数据的安全和一致性,是维护数据库更容易。

约束有五种类型: 

1、主键约束( Primary key, 简称 PK) 
2、非空约束( not null , 简称 NN ) 
3、唯一约束( Unique , 简称 UK ) 
4、检查约束( Check , 简称 CK ) 
5、外键( Foreign key, 简称 FK )

约束定义有两种:表级定义,列级定义。 

约束的定义在后面每个约束的时候会提到。 
表级定义的用法: 
constraint Student_ID_pk primary key (ID) 
constraint 为表级约束的关键字 
Student_ID_pk为该约束的命名 
—-建议约束命名规则:表名_ 列名_约束条件的类型 
—-例:Student_ID_pk 
primary key为该约束的类型 
ID为该表中的要加该约束的列名 
多个表级约束定义的时候用逗号隔开

1、主键约束( Primary key, 简称 PK) 

该约束的定义为:不能重复,不能为null。 
定义可以是列级定义和表级定义 
表创建后,ID号不能重复,插入语句如果添加重复ID号,则会报错。 
列级定义:

create table Student(    ID number(2) primary key);
  • 1
  • 2
  • 3

表级定义:

create table Student(    ID number(2),    constraint Student_ID_pk primary key (ID));
  • 1
  • 2
  • 3
  • 4

2、非空约束( not null , 简称 NN ) 

约束该列不能为空值。 
非空约束只能在列级。 
姓名可以重复但是不能为空。

create table Student(    ID number(2) primary key,    name varchar2(10) not null);
  • 1
  • 2
  • 3
  • 4

如果要给非空约束命名:

create table Student(    ID number(2) primary key,    name varchar2(10) constraint student_name_nn not null);
  • 1
  • 2
  • 3
  • 4

3、唯一约束(Unique,简称UK) 

约束该列数据不能重复,不能相同。 
定义可以表级定义和列级定义。 
邮箱可以为空但是不能重复

表级定义:

create table Student (    ID number(2) primary key,    name varchar2(10) not null,    email varchar2(30) unique);
  • 1
  • 2
  • 3
  • 4
  • 5

列级定义:

create table Student (    ID number(2),    name varchar2(10) not null,    email varchar2(30),    constraint Student_ID_pk primary key (ID),    constraint student_email_uk unique(email));
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

4、检查约束( Check , 简称 CK ) 

检查自定义条件是否为真,为真就可以插入,更新。 
定义可以表级定义和列级定义。

性别只能是男女。 

列级定义:

create table Student (    ID number(2) primary key,    name varchar2(10) not null,    email varchar2(30) unique,    sex varchar2(1) check(sex in('F','M'))//F女,M男);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

表级定义:

create table Student(    ID number(2),    name varchar2(10)not null,    email varchar2(30),    sex varchar2(1),    constraint student_id_pk primary key(ID),    constraint student_email_uk unique(email),    constraint student_sex_ck check(sex in('F','M')));
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

5、外键( Foreign key, 简称 FK ) 

外键约束定义在两个表的两个字段上( 或者一个表的两个字段上 ) , 用于保证相关两个字段的关系。

表级定义

create table Student(    ID number(2),    name varchar2(10)not null,    email varchar2(30),    sex varchar2(1),    majorid number(2),//专业ID    constraint student_id_pk primary key(ID),    constraint student_email_uk unique(email),    constraint student_sex_ck check(sex in('F','M')),    constraint student_majorid_fk foreign key(majorid) references major(ID)    //major为专业表);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

foreign key表示定义的是外键类型 

references为连接的是哪个表中的连接关键字 
后面跟的表示为外表的哪个列 
该操作可以添加null值

如果删除专业表中的ID号,且学生表中有相对应的行,就会报错有关联项不能删除。 

如果在最后添加on delete set null,则可以在主表数据被删除的时候,表关联的数据(单独格)就置为null

constraint student_majorid_fk foreign key(majorid) references major(ID) on delete set null
  • 1

如果在最后添加on delete cascade,则可以在主表数据被删除的时候,表关联的数据(整行)都会被删除。

constraint student_majorid_fk foreign key(majorid) references major(ID) on delete cascade
  • 1

6、修改约束条件

alter table Studentdrop constraint student_sex_ck;//如果有约束条件了,需要先删除alter table Studentadd constraint student_sex_ck check(sex in('F','M'));

转载地址:http://gewdf.baihongyu.com/

你可能感兴趣的文章
初识Vue全家桶 Nuxt.js(一)
查看>>
基本路由及动态路由(二)
查看>>
视图:默认模板+默认布局(自定义布局)+nuxt.js页面(三)
查看>>
基于nuxt下asyncData,fetch发送axios请求(四)
查看>>
插件机制+自定义axios(五)
查看>>
Redis的学习之路
查看>>
Windows下Redies+GUI安装,使用Jedis与spring boot 整合
查看>>
Windows创建本地版本库(1)
查看>>
解决"nothing added to commit but untracked files present"
查看>>
基于java的酒店管理系统的设计与实现
查看>>
基于WEB的仓库管理系统的设计与实现
查看>>
基于java的web聊天系统
查看>>
基于java的俄罗斯方块的设计与实现
查看>>
基于java的魂斗罗的设计
查看>>
基于java的网页内容管理
查看>>
基于java的学生管理系统
查看>>
基于java网盘搜索的设计与实现
查看>>
基于SSM的仿小米商城源码
查看>>
基于SSM的医院人事管理系统的设计与实现
查看>>
基于SSM的网上购物系统的设计与开发
查看>>