• SqlServer视图


    一:视图的概述

     视图是从一个或者多个表导出的,它的行为与表非常相似,但视图是一个虚拟表,在视图中可以使用SELECT语句查询数据,以及使用insert、update和delete语句修改记录,对于视图的操作最终转化为对基本数据表的操作。视图不仅可以方便操作,而且可以保障数据库系统的安全性。

     视图一经定义便存储在数据库中,与其相对应的数据并没有像表数据那样在数据库中在存储一份,通过视图看到的数据只是存放在基本表中的数据。可以对其进行增删该查,通过视图对数据修改,基本表数据也对应变化,反之亦然。

     视图如果使用order by排序,必须搭配top或offset fetch使用,所有视图的列名称必须唯一。

    二:视图的分类

     SQL Server的视图可以分为3类,分别是:标准视图,索引视图,分区视图。

    2.1.标准视图

     标准视图组合了一个或多个表中的数据,可以获得使用视图中的大多数好处,包括重点将放在特定的数据上及简化数据操作。

    2.2.索引视图

     索引视图是被具体化了的视图,即它已经经过计算并存储。可以为视图创建索引,对视图创建一个唯一的聚集索引。索引视图可以显著提高某些类型查询的性能,索引视图尤其适于聚合许多行的查询,但它们不太适于经常更新的基本数据集。

    2.3.分区视图

     分区视图在一台多多台服务器间水平连接一组成员表的分区数据,这样,数据看上去如同来自一个表。连接本地同一个SQL Server实例中的成员表的视图是一个本地区分视图。

    三:视图的优点和作用

    与直接从表中读取数据相比,视图具有以下优点:

    3.1.简单化

     看到的就是需要的,视图不仅可以简化用户对数据的理解,也可以简化对它们的操作,那些经常使用的查询可以被定义为视图,从而使得用户不必为以后的每次操作指定全部的条件。

    3.2.安全性

     视图可以作为一种安全机制。通过视图用户只能查看和修改他们所能看到的数据。其它或表既不可见也不可以访问。如果某一用户想要访问视图的,必须授予其访问权限。视图所引用表的访问权限与视图权限的设置互不影响。

    3.3.逻辑数据独立性

     视图可以帮助用户屏蔽真实表结构变化带来的影响。

    四:视图的基本操作和语法

    4.1.创建视图

    CREATE VIEW view_name
     AS
        SELECT column_name(s) FROM table_name
    WHERE condition

    测试数据准备:

    use sample_db;
    create table studentTable(
        id int identity(1,1)primary key,
        name varchar(20),
        gender char(2),
        age int,
    )
    insert into studentTable (name,gender,age)
    values
        ('刘备','男',28),
        ('张飞','男',24),
        ('关羽','男',26); 
    --创建视图
    if (exists (select * from sys.objects where name = 'student_view'))
        drop view student_view
    go
    --student_view()不使用参数,默认为基础表中的列名称
    create view student_view 
    as
    select name,age from studentTable where age>24;
    --执行视图
    select * from student_view;

    查看视图的信息

    • 使用sp_help存储过程查看视图的定义信息
    • 使用sp_helptext系统存储过程使用来显示规则,默认值,未加密的存储过程,用户定义函数,触发器或视图的文本,语法
    exec  sp_help 'student_view';
    exec sp_helptext 'student_view';

    创建加密视图:

    --加密视图
    if (exists (select * from sys.objects where name = 'student_encryption'))
        drop view student_encryption
    go
    create view student_encryption
    with encryption --加密
    as
        select id, name, age from studentTable
    go
    --view_definition is null
    --查看加密视图
    select * from information_schema.views 
    where table_name like 'student_encryption';

     

      从执行结果可看出view_definition字段为 NULL

    4.2.使用视图修改基本表数据

    (1).向视图插入数据,基本表也会同步插入数据。

    create view stu_insert_view(编号,姓名,性别,年龄)
    as
    select id,name,gender,age from studentTable;
    go
    select * from studentTable;
    ---插入一条数据
    insert into stu_insert_view values('曹操','男',40);
    ----查看插入记录之后表中的内容。
    select * from studentTable;   

    (2).修改视图数据,基本表也会同步修改数据。

    --查看修改之前的数据
    select * from studentTable;
    --修改数据
    update student_view set age=30
    where name='刘备';
    --查看修改后的数据
    select * from studentTable;

    (3).删除视图数据,基本表也会同步删除数据。

    --语法
    delete view_name where condition;
    --例子
    delete student_view where name ='张飞';
    select * from student_view;
    select * from studentTable;

     4.3.修该视图

    --修改视图
    alter view student_view 
    as
    select * from studentTable where age>26;

    4.4.删除视图 

    --语法
    drop view view_name1,view_name2,......,view_nameN;
    --该语句可以同时删除多个视图,只要在删除各视图名称之间用逗号分隔即可。
    drop view studentTable;

    五:视图和表的区别

    1. 视图是已经编译好的SQL语句,是基于SQL语句的结果集的可视化表,而表不是;
    2. 视图(除过索引视图)没有实际的物理记录,而基本表有;
    3. 表是内容,视图是窗口;
    4. 表占物理空间,而视图不占物理空间,视图只是逻辑概念的存在;
    5. 视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全角度说,视图可以防止用户接触数据表,从而不知表结构;
    6. 表属于全局模式的表,是实表;视图数据局部模式的表,是虚表;
    7. 视图的建立和删除只影响视图本身,不影响对应的基本表。
  • 相关阅读:
    千百撸
    迅捷PDF转换器(在线)
    request不能接受前端传来的参数的问题
    新买的orico蓝牙usb连接器使用方法与驱动
    win8.1下右下角出现大小写切换状态显示框解决方案
    idea tomcat 热部署方法
    set方法在set传入值时报空指针异常,直接设置定值即可
    eclipse项目转移至IDEA与IDEA tomcat报错(idea自带tomcat版本太高)与war包部署到win服务器与idea提交git的总结
    GNS3 jungle newsfeed 隐藏
    解决 sr 的端口占用问题
  • 原文地址:https://www.cnblogs.com/xiaohuhu/p/11750982.html
Copyright © 2020-2023  润新知