SQL之视图的使用

视图的引入

​ 视图可以看作定义在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;

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

    原文作者:安静的学点东西
    原文地址: https://www.jianshu.com/p/d75791e0f293
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞