Oracle数据库中约束和视图

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Youth_Mr6/article/details/81461670

约束: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:
            字典中包含了用户的对象。

猜你喜欢

转载自blog.csdn.net/Youth_Mr6/article/details/81461670