Oracle视图添加约束,Oracle数据库中约束和视图

约束:constraint

概念:

约束是定义在表上的一种强制规则

作用:

当为某个表定义约束后,对该表所做的所有SQL操作都必须满足约束的规则要求,否则将操作失败

命名规则:表名_列名_约束类型

默认约束名:SYS_Cn,n是一个唯一的整数

约束分类:

1)主键约束(pk):primary key

概念:

主键约束,用来确保表中的某一列或者某几列组合的所有行数据必须唯一,并且确保作为主键一部分的列不能包含空值

PS:

唯一的,非空的,每张表主能创建一个主键约束,一个主键可以由多个列组成(联合主键),Oracle会自动添加唯一索引

2)唯一约束(uk):unique

概念:

唯一约束,用来确保表中的某一列或者某几列组合的所有行数据必须唯一,定义unique约束的列(或列组合)被称为唯一键

PS:

唯一的,允许为空,一张表可以有多个唯一约束,Oracle会自动添加唯一索引

3)非空约束:not null

非空约束,确保被约束列的的所有行记录都不能为空值

PS:

只能定义在列级别上

4)检查约束(ck):check

概念:

检查性约束,确保某个列的所有行数据必须满足的条件

PS:

1)表达式不能使用伪列,如:currval,nextval,level,rownum

2)表达式不能使用对其他记录其他值的查询

3)可以调用sysdate,uid,user和userenv

函数

5)外键约束(fk):foreign

概念:

外键约束,确保相关联的两个字段的关系:

-外键列的值必须在引用列值的范围内,或者为空

-外键参照的列必须是主键或者唯一键

PS:

主键表主键值被外键表参照时,主键表记录不允许被删除

6)列级约束:CONSTRAINT 约束名 约束类型

7)表级约束:CONSTRAINT 约束名 约束类型(约束列)

外键约束:

foreign key:定义在子表的列中

references:引用列所在的父表

1)ON DELETE CASCADE:

当父表中的行被删除时,子表中相依赖的行同时被删除;

2)ON DELETE SET NULL:

当父表的行被删除时,子表中相依赖的列值被转换为空值;

3)无ON DELETE CASCADE或)ON DELETE SET NULL选项,当父表中的行被删除时,如果父表中的行在子表中被引用,则提示不能被删除

约束操作:

1)定义约束:

约束通常在创建表的同时被创建

2)追加约束:

在表被创建后,如果有需求也可以临时添加约束,不修改表结构

语法:

ALTER TABLE 表名 ADD [CONSTRAINT 约束名] 约束类型(约束列);

3)删除约束:不修改表结构

语法:

ALTER TABLE 表名 DROP PRIMARY KEY|UNIQUE(column)|CONSTRAINT 约束名 [CASCADE];

4)启用约束:

约束可以被临时启用

语法:

ALTER TABLE 表名 ENABLE CONSTRAINT 约束名;

5)禁用约束:

约束可以被临时禁用

语法:

ALTER TABLE 表名 DISABLE CONSTRAINT 约束名 [CASCADE];

定义约束:

1)约束既可以写在每个对应列的后面,称之为列级别约束,一个列级别约束只能作用在一个列上

2)约束也可以在写完所有列之后,再写约束,称之为表级别约束,一个表级别约束既可以作用在一个列上,也可以作用在列的组合上

3)not null 约束只能定义在列级别上,联合主键或联合唯一性约束只能定义在表级别上,其他约束既可以定义成表级别,也可以定义成列级别

4)列级别约束和表级别约束达到的作用完全相同,只是书写的位置不同

数据字典:

1)USER_CONSTRAINTS:

查看表上所有的约束。

2)USER_CONS_COLUMNS:

查看与约束相关的列名,该字典对于那些由系统指定名字的约束特别有用。

3)在约束类型中,c代表check,p代表primary key,R代表foreign key,u代表unique,notnull约束实际上是一个check约束

视图(view):虚表,没有物理存储空间,对视图的操作都会作用在相应表上

概念:

视图是逻辑上来自一张表或多张表的数据的集合

分类:

1)简单视图:

只基于一张表,不能有组数据和组函数,可以进行DML操作

2)复杂视图:

基于一张表或者多张表,有组数据和组函数,不一定进行DML操作

作用:

1)限制其他用户对数据库表的访问,因为视图可以有选择性的显示数据库表的一部分

2)容易实现复杂查询

3)对于相同的数据可以产生不同的视图

视图操作:

1)创建视图:

语法:

CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW 视图名

[(column[, column]...)]

AS 子查询

[WITH CHECK OPTION [CONSTRAINT constraintname]]

[WITH READ ONLY]

***********************************

OR REPLACE:

如果所创建的视图已经存在,该选项表示修改原始图的定义

FORCE:

不管视图所基于的基表是否存在,都会创建该视图

NOFORCE:

只有视图所基于的基表都存在,才会创建该视图

WITH CHECK OPTION:

一个约束条件,通过视图所插入或修改的数据行必须满足视图所定义的查询;

WITH READ ONLY:

只读,不能进行DML操作

2)修改视图:

语法:

CREATE OR REPLACE VIEW

3)删除视图:

语法:

drop  view  视图名;

视图上执行DML操作的规则:

1)删除操作:视图中不能有以下情况

1-1)不能有组函数

1-2)不能有group by字句

1-3)不能有distinct

2)修改操作:视图中不能有以下情况

2-1)不能有组函数

2-2)不能有group by字句

2-3)不能有distinct

2-4)不能使用表达式定义的列

2-5)不能有rownum伪列

3)添加操作,视图中不能有一下情况

3-1)不能有组函数

3-2)不能有group by字句

3-3)不能有distinct

3-4)不能使用表达式定义的列

3-5)不能有rownum伪列

3-6)不能基表中未在试图中选择的其他列定义为非空并且没有默认值

数据字典表:

1)USER_VIEWS:

字典中包含了视图的定义。

2)USER_UPDATABLE_COLUMNS:

字典包含了哪些列可以更新、插入、删除。

3)USER_OBJECTS:

字典中包含了用户的对象。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值