美文网首页
SQL之视图的使用

SQL之视图的使用

作者: 安静的学点东西 | 来源:发表于2017-09-07 12:12 被阅读111次

    视图的引入

    ​ 视图可以看作定义在SQL Server上的虚拟表.视图正如其名字的含义一样,是另一种查看数据的入口.常规视图本身并不存储实际的数据,而仅仅存储一个Select语句和所涉及表的metadata.

    ​ 通过视图,客户端不再需要知道底层table的表结构及其之间的关系。视图提供了一个统一访问数据的接口。

    • 特点
      • 视图是一种虚拟的表,是从数据库中一个或者多个表中导出来的表;
      • 数据库中只存放了视图的定义,并没有存放视图中的数据,这些数据存放在原来的表中;
      • 使用试图查询时,数据库系统会从原来的表中读取对应的数据。
    • 作用
      • 简便化:视图隐藏了底层的表结构,简化了数据访问操作
      • 安全性:因为隐藏了底层的表结构,所以大大加强了安全性,用户只能看到视图提供的数据
      • 使用视图,方便了权限管理,让用户对视图有权限而不是对底层表有权限进一步加强了安全性
      • 逻辑独立性:视图提供了一个用户访问的接口,当底层表改变后,改变视图的语句来进行适应,使已经建立在这个视图上客户端程序不受影响

    创建视图

    CREATE [ALGORITHM={UNDEFIEND|MERGE|TEMPTABLE}]
        VIEW 视图名 [{属性清单}]
        AS SELECT 语句
        [WITH [CASCADED|LOCAL]CHECK OPTION];
        
    ALGORITHM是可选参数,表示视图选择的算法;
    “视图名”参数表示要创建的视图的名称;
    “属性清单”是可选参数,其指定了视图中各种属性的名词,默认情况下与select语句中查询的属性相同;
    SELECT语句参数是一个完整的查询语句,表示从某个表查出某些满足条件的记录,将这些记录导入视图中;
    WITH CHECK OPTION是可选参数,表示更新视图时要保证在该视图的权限范围之内;
    
    algorithm包括undefined、merge和temptable。其中,
    undefined选项表示MySql将自动选择所要使用的算法;
    merge选项表示将使用视图的语句与视图定义合并起来,使得视图定义的某一部分取代语句的对应部分;
    temptable选项表示将视图的结果存入临时表,然后使用临时表执行语句;
    cascaded是可选参数,表示更新视图时要满足所有相关视图和表的条件,该参数为默认值;
    local表示更新视图时,要满足该视图本身的定义条件即可。
    

    在单表上创建视图

    CREATE VIEW v1 AS SELECT * FROM t_book;
    SELECT * FROM v1;
    
    CREATE VIEW v2 AS SELECT bookName, id FROM t_book;
    SELECT * FROM v2;
    
    //更换视图属性名称
    CREATE VIEW v3(FIRST, SECOND) AS SELECT bookName, id FROM t_book;
    SELECT * FROM v3;
    

    在多表中创建视图

    CREATE VIEW v4 AS SELECT bookName, typeName FROM t_book, t_booktype WHERE t_book.bookTypeId=t_bookType.id;
    SELECT * FROM v4;
    

    查看视图

    • describe 视图名 查看视图基本信息,也可以用desc 视图名;
    desc v1;
    
    • show table status 语句查看视图基本信息;
    show table status like 'v1';//但是基本没有内容,因为它是一个虚表
    
    • show create view 视图名 语句查看视图详细信息;
    show create view v1;
    
    • 在views表中查看视图详细信息。

    修改视图

    create or replace view语句修改视图

    create or replace [algorithm={undefined|merge|temptable}]
        view 视图名[(属性清单)]
        as select 语句
        [with [cascaded|local|check option]];
        
    //CREATE OR REPLACE VIEW v1 AS SELECT bookName FROM t_book;
    

    ALTER语句修改视图

    alter [algorithm={undefined|merge|temptable}]
        view 视图名[(属性清单)]
        as select 语句
        [with [cascaded|local|check option]];
        
    //ALTER VIEW v1 AS SELECT * FROM t_book;
    

    更新视图

    更新视图是指通过视图来更删改查表中的数据。因为视图是一个虚表,其中没有数据。通过视图更新时,都是转换基本表来更新。更新视图时,只能更新权限范围内的数据。超出了范围,就不能更新。

    INSERT INTO v1 VALUES(NULL, "hello world", 2);
    UPDATE v1 SET bookName="update view v1" WHERE id=9;
    DELETE FROM v1 WHERE id=9;
    

    删除视图

    删除视图是指删除数据库中已存在的视图。删除视图时,只能删除视图的定义,不会删除数据;

    DROP VIEW [IF EXISTS] 视图列表 [RESTRICT|CASCADE];
    //DROP VIEW v1;
    

    今天对于视图的介绍就到这里,涉及的都是基础的内容,下一篇我们主要介绍函数及存储过程的使用。

    相关文章

      网友评论

          本文标题:SQL之视图的使用

          本文链接:https://www.haomeiwen.com/subject/mrcijxtx.html