Oracle视图view

来源:互联网 发布:python电影推荐系统 编辑:程序博客网 时间:2024/06/05 19:56
视图view

一、概述

视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图的作用类似于筛选。定义视图的筛选可以来自当前或其它数据库的一个或多个表,或者其它视图。分布式查询也可用于定义使用多个异类源数据的视图。 就是提取一张或者多张表的数据生成一个映射,操作视图可以达到操作原表的效果,方便数据的管理以及安全操作。

    视图的作用:
        1.隐藏表中的重要数据
        2.代替一些比较长的sql语句 
    视图分为俩类:
        简单视图:
           视图所代表的sql中如果没有group by语句,没有组函数,查询的只有一张表,那么这样的视图就是简单视图.
        复杂视图
           视图所代表的sql中如果有group by语句,或者有组函数,或者查询的是多张表,那么这样的视图就是复杂视图.  
    简单视图和复杂视图的区别:
        通过简单视图可以修改原来表中的数据,通过复杂视图是不能修改原来的数据的。
二、视图实例
    创建视图的格式:
        create or replace view 视图名字
        as
        sql语句
    
    删除视图的格式
        drop view 视图名字;  
    测试表:
    create table t_user(
        id number constraint user_id_pk primary key,
        name varchar2(100),
        salary number
    );
    drop table t_user;     
    插入数据:
    insert into t_user(id,name,salary)  
    select id,last_name,salary
    from s_emp; 
    //创建视图
    create or replace view v_test
    as
    select *
    from t_user
    where id > 10; 
    //查看视图内容
    select *
    from v_test;  
    //可以通过*简单视图*对原来的表进行数据的删除/更新/插入
    delete from v_test where id=16; 
    update v_test set name = 'zhangsan' where id = 20; 

    insert into v_test(id,name,salary) values(28,'tom1',3000);

如下图所示,我们对视图进行插入操作,但是能够在原表中查询到插入的结果


三 限制条件:           
    with read only语句  
        特点:只能通过视图进行查询数据,不能修改
        例如:
        create or replace view v_test
        as
        select *
        from t_user
        where id > 10
        with read only;         
        这个视图v_test将来只能查询,不能进行修改
     with check option语句
        特点:通过视图进行的修改 那么也必须可以通过这个视图能够显示出来,要不然就操作失败
     例如:
        //测试用的表及其数据
        drop table t_user;
        create table t_user(
            id number constraint user_id_pk primary key,
            name varchar2(100),
            salary number
        ); 
        insert into t_user values(1,'tom',1000);
        insert into t_user values(2,'tom2',2000);                  
        创建视图:
        create or replace view v_test
        as
        select id,name,salary
        from t_user
        where id=2
        with check option;          
        //查询视图中的数据
        select * from v_test; 
        //插入报错 因为这个操作通过视图显示不出来
        insert into v_test values(3,'tom3',3000); 
        //更新失败 因为这个操作通过视图显示不出来
        update v_test
        set name='lily'
        where id=1; 
        //更新成功 因为这个操作通过视图可以显示出来
        update v_test
        set name='lily'
        where id=2;     
四、复杂视图
        例如:
            create or replace view v_test
            as
            select avg(salary)
            from t_user                 
        复杂视图只能用来查询,不能修改
 
 

1 0
原创粉丝点击