Oracle数据库学习(五)--视图,序列,索引,约束

     

    1. 视图、序列、索引

    1.1. 视图

    1.1.1. 什么是视图

    视图(VIEW)也被称作虚表,即虚拟的表,是一组数据的逻辑表示,其本质是对应于一条SELECT语句,结果集被赋予一个名字,即视图名字。

    视图本身并不包含任何数据,它只包含映射到基表的一个查询语句,当基表数据发生变化,视图数据也随之变化。

    图-1视图和表

    创建视图的语法:

    
        
        
        
    1. CREATE [OR REPLACE] VIEW view_name[(alias[, alias…])]
    2. AS subquery ;

    视图创建后,可以像操作表一样操作视图,主要是查询操作。

    语法中的Subquery是SELECT查询语句,对应的表被称作基表。

    根据视图所对应的子查询种类分为几种类型:

    • SELECT语句是基于单表建立的,且不包含任何函数运算、表达式或分组函数,叫做简单视图,此时视图是基表的子集;
    • SELECT语句同样是基于单表,但包含了单行函数、表达式、分组函数或GROUP BY子句,叫做复杂视图;
    • SELECT语句是基于多个表的,叫做连接视图。

    1.1.2. 视图的作用

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

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

    1.1.3. 授权创建视图

    创建视图的DDL语句是CREATE VIEW,用户必须有CREATE VIEW系统权限,才能创建视图。如果没有权限,创建视图时会提示:权限不足。

    管理员可以通过DCL语句授予用户创建视图的权限。下例中管理员给用户tarena创建视图的权限:

    
        
        
        
    1. GRANT CREATE VIEW TO tarena;

    1.1.4. 创建简单视图(单表)

    创建一个简单视图V_EMP_10,来显示部门10中的员工的编码、姓名和薪水:

    
        
        
        
    1. CREATE VIEW v_emp_10
    2. AS
    3. SELECT empno, ename, sal, deptno
    4. FROM emp
    5. WHERE deptno = 10;

    查看视图结构:

    
        
        
        
    1. DESC v_emp_10;

    1.1.5. 查询视图

    查询视图和查询表的操作相同:

    
        
        
        
    1. SELECT * FROM v_emp_10;

    此时视图的列名,和创建视图时的列名一致,不一定是原列名:

    
        
        
        
    1. SELECT id, name, salary FROM v_emp_10;

    1.1.6. 对视图进行INSERT操作

    视图本身并不包含数据,只是基表数据的逻辑映射。所以当对视图执行DML操作时,实际上是对基表的DML操作。对视图执行DML操作的基本原则:

    • 简单视图能够执行DML操作,下列情况除外:在基表中定义了非空列,但简单视图对应的SELECT语句并没有包含这个非空列,导致这个非空列对视图不可见,这时无法对视图执行INSERT操作;
    • 如果视图定义中包含了函数、表达式、分组语句、DISTINCT关键字或ROWNUM伪列,不允许执行DML操作;
    • DML操作不能违反基表的约束条件。

    对简单视图执行INSERT操作,成功插入数据到基表中:

    
        
        
        
    1. INSERT INTO v_emp_10
    2. VALUES(1234, 'DOCTOR', 4000, 10);

    简单视图可以通过DML操作影响到基表数据。

    1.1.7. 创建具有CHECK OPTION约束的视图

    语法如下:

    
        
        
        
    1. CREATE [OR REPLACE] VIEW view_name[(alias[, alias…])]
    2. AS subquery
    3. [WITHCHECKOPTION];

    其中:WITH CHECK OPTION短语表示,通过视图所做的修改,必须在视图的可见范围内:

    • 假设INSERT,新增的记录在视图仍可查看
    • 假设UPDATE,修改后的结果必须能通过视图查看到
    • 假设DELETE,只能删除现有视图里能查到的记录

    创建带有CHECK OPTION约束的视图:

    
        
        
        
    1. CREATE OR REPLACE VIEW v_emp_10
    2. AS
    3. SELECT empno id, ename name, sal salary, deptno
    4. FROM emp
    5. WHERE deptno = 10
    6. WITH CHECK OPTION;

    下述DML语句操作失败,因为部门20不在视图可见范围内:

    
        
        
        
    1. INSERT INTO v_emp_10 VALUES(1008,‘donna’,5500, 20);
    2. UPDATE v_emp_10 SET deptno = 20 WHERE id = 7782;

    1.1.8. 创建具有READ ONLY约束的视图

    对简单视图进行DML操作是合法的,但是不安全的。如果没有在视图上执行 DML 操作的必要,在建立视图时声明为只读来避免这种情况,保证视图对应的基表数据不会被非法修改。加入READ ONLY约束的视图语法如下:

    
        
        
        
    1. CREATE [OR REPLACE] VIEW view_name
    评论 2
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值