zoukankan      html  css  js  c++  java
  • 数据库原理之视图

            视图是从一个或多个表中导出来的虚拟表。这是因为视图返回的结果集的一般格式和由列和行组成的表相似,并且在SQL语句中引用视图的方式也与引用表的方式相同。

    一、视图概述

            视图是从一个或多个基本表或视图中导出的虚拟表,是从现有基表中抽取若干子集组成用户的专用表,这种构造方式必须使用SQL中的 SELECT 语句实现。在定义一个视图时,只是把其定义放在数据库中,并不直接存储视图对应的数据,知道用户使用视图时采取查找对应的数据。

            使用视图具有如下优点:

            1.1 简化对数据的操作。视图可以简化用户操作数据的方式。可将经常使用的链接、投影、联合查询的选择查询定义为视图,这样在每次执行相同查询时,不必重写这些复杂的语句,只要一条简单的查询视图语句即可。视图可向用户隐藏表与表之间复杂的连接操作。

            1.2 自定义数据。视图能够让不同的用户不同方式看到不同或相同的数据集,即使不同水平的用户共用同一数据库时也是如此。

            1.3 数据集中显示。 视图使用户着重于其感兴趣的某些特定数据或所负责的特定任务,可以提高数据操作效率,同时增强了数据的安全性,因为用户只能看到视图内定义的数据,而不是基本表中的数据。

            1.4 导入和导出数据。 可以用视图将视图导入和导出。

            1.5 合并分割数据。 在某些情况下,由于表中数据量太大,在表的设计过程中可能经常对表进行水平分割或垂直分割,这样表结构的变化会对应用程序造成不良影响。使用视图就可以重新保持原有的数据关系,从而使外模式保持不变,原有的应用程序仍可以通过视图来重载数据。

            1.6 安全机制。 视图可以作为一种安全机制。通过视图,用户只能查看和修改他们能看到的数据。其他数据库或表既不可见也不可访问。

    二、视图的创建

            使用 CREATE VIEW 语句创建视图,语法格式如下:

    create view <视图名> as <select语句>;
    语法说明如下:
    <视图名>:指定视图的名称。该名称在数据库中必须是唯一的,不能与其他表或视图同名。
    <SELECT语句>:指定创建视图的 SELECT 语句,可用于查询多个基础表或源视图。

            对于创建视图的 SELECT 语句有如下限制:

    • 用户除了拥有 CREATE VIEW 权限外,还具有操作中涉及的基础表和其他视图的相关权限。
    • SELECT 语句不能引用系统或用户变量。
    • SELECT 语句不能包含 FROM 子句中的子查询。
    • SELECT 语句不能引用预处理语句参数。

            2.1 创建基于单表的视图

    表明 tb_students_info
    字段 id | name   | dept_id | age  | sex  | height | login_date

            在 tb_students_info 表上创建一个名为 view_students_info 的视图,输入的 SQL 语句和执行结果如下所示。

    create view view_students_info as select * from tb_students_info;

            默认情况下,创建的视图和基本表的字段是一样的,也可以通过指定视图字段的名称来创建视图。

            在 tb_students_info 表上创建一个名为 v_students_info 的视图,输入的 SQL 语句和执行结果如下所示。

    create view v_students_info (s_id,s_name,d_id,s_age,s_sex,s_height,s_date) 
    as select id,name,dept_id,age,sex,height,login_date from tb_students;

            view_students_info 和 v_students_info 两个视图中的字段名称不同。在使用视图时,可能用户不需要了解基本表的结构,更接触不到实际表中的数据,从而保证了数据库的安全。

            2.2 基于多表创建视图

    create view 视图名(视图字段,视图字段,...) as
    select 字段,字段,... from 表1,表2 where 表1.字段=表2.字段;

     三、视图的使用

            视图的使用主要包括视图的检索,以及通过视图对基础表进行插入、修改、删除操作。视图的检索几乎没有限制,但是通过视图实现表的插入、修改、删除操作则有一定的限制条件。

            3.1 使用视图进行检索

            视图的查询总是转换成对他的基础表的等价查询。

            3.2 通过视图修改数据

            视图也可以使用 INSERT 命令插入行,当执行 INSERT 命令时,实际上是向视图所引用的基础表插入行。

            如果视图中有下面所述属性,则插更新、删除操作将失效。

    • 视图定义中的 FROM 子句包含两个或多个表,且 SELECT 选择列表表达式中的列包含来自多个表的列。
    • 视图的列是从集合函数派生的。
    • 视图中的 SELECT 语句包含 GROUP BY 子句或 DISTINCT 选项。
    • 视图的列时从常量或表达式派生的。

            视图使用 DELETE 命令进行删除。

    delete from 视图名 where 字段=条件:

    四、视图的修改

            视图被创建之后,由于某种原因(如基本表中的列发生了改变,或需要在视图中增/减若干列等),需要对视图进行修改。

    alter view 视图名 as select语句 with check option;

    五、视图的删除

            视图创建之后,可以随时删除。当某个视图被另一个视图引用,当删除这个视图后,如果调用另一个视图,则会出现错误提示。因此,通常基于数据定义视图,而不是基于视图来定义视图。

    drop view 视图名:

            DROP VIEW 命令可以删除多个视图,各视图之间用逗号隔离,删除视图必须有 DORP 权限。

    结束!

  • 相关阅读:
    用户管理
    开机、重启、用户登录注销
    网络请求的封装
    Vuex
    Promise
    Vue Router(二)
    Vue Router(一)
    Vue CLI
    前端模块化-导入导出
    插槽
  • 原文地址:https://www.cnblogs.com/aaronthon/p/13263134.html
Copyright © 2011-2022 走看看