zoukankan      html  css  js  c++  java
  • 第十六节:SQLServer视图的概述、基本操作、EFCore中映射和使用

    一. 视图概述

     1. 什么是视图

     视图是一个虚拟表,是从一个或多个表中到处,行为与表相似,同样可以Select、Insert、Update、对视图的最终操作都会转换成对数据表的操作,可以保障数据系统的安全性。

    2. 视图的分类

    (1). 标准视图

      标准视图组合了一个或多个表结构中数据,视图的基本功能都可以使用,侧重点是简化数据查询、查询指定数据。

    (2). 索引视图

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

    (3). 分区视图

      多台服务器之间表的水平组合,用于分布式场景。

    3. 视图的优点 

     (1). 简化用户的操作,所见即所要,不必再指定一些特殊查询条件。

     (2). 从安全角度来考虑,视图只是一些SQL语句的集合。可以防止用户接触数据表,从而不知表结构;用户只能修改或者查看他所用到的数据,其它数据 和 表是不可以访问,视图和表的设置权限是互不影响的。

     (3). 屏蔽真实表结构带来的变化。 

    4. 视图与表的区别

     (1). 视图是已经编译好的SQL语句,是基于SQL语句的结果集的可视化表,而表不是。 

     (2). 除了索引视图外,其它视图是没有实际的物理记录,而基本表有,即表是占物理空间的,视图不占,只是逻辑概念的存在。

     (PS:表是实表,视图是虚拟表)

     (3). 视图的创建和删除只影响视图,不影响其对应的表结构。

    二. 基本操作

    1. 创建普通视图

    if (exists (select * from sys.objects where name='UserInfor_View'))
        drop view UserInfor_View
    go
    create view UserInfor_View
    as
    select id,userAge from UserInfor where userAge >=20;
    --执行视图
    select * from UserInfor_View;

    运行结果:

    2. 创建加密视图

    if(exists (select * from sys.objects where name='UserInfor_View_encryption'))
        drop view UserInfor_View_encryption
    go 
    create view UserInfor_View_encryption
    with encryption   --加密
    as
        select id,userName from UserInfor
    -- 执行加密视图
    select * from UserInfor_View_encryption
    -- 查看加密视图的结构
    select * from INFORMATION_SCHEMA.VIEWS where TABLE_NAME like 'UserInfor_View_encryption'

    运行结果:

    3. 查看视图信息

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

    运行结果:

    4. 通过视图修改数据 

    (1). 增加数据

    --4.1 增加数据
    insert into UserInfor_View values('004',26);
    --查看主表 和 视图
    select * from UserInfor;
    select * from UserInfor_View;

    运行结果:

    (2). 修改数据

    --4.2 修改数据
    update UserInfor_View set userAge=100 where id = '004';
    --查看主表 和 视图
    select * from UserInfor;
    select * from UserInfor_View;

    运行结果

     

    (3). 删除数据

    --4.3 删除数据
    delete from UserInfor_View where userAge=100
    --查看主表 和 视图
    select * from UserInfor;
    select * from UserInfor_View;

     运行结果:

     

    5. 修改视图

    --5.修改视图
    alter view UserInfor_View
    as 
    select id,userAge from UserInfor where userAge >=10;
    --执行视图
    select * from UserInfor_View;

    运行结果:

     

    6. 删除视图

    drop view UserInfor_View,UserInfor_View_encryption;

    7. 一个应用,比如把用户和用户详情表关联起来做一个视图,用于查询 

    if (exists (select * from sys.objects where name='AllUserInfor'))
        drop view AllUserInfor
    go
    create view AllUserInfor
    as
      select t1.id, t1.userAge, t2.userSchool,t2.userAddress from UserInfor as t1
      inner join UserDetails as t2 on t1.id = t2.userId
    --执行视图
    select * from AllUserInfor where userAge >10;

    运行结果:

    三. EFCore中映射和使用

    1. 从EF Core3.0 开始,已经可以直接通过指令来映射视图了。

      https://docs.microsoft.com/zh-cn/ef/core/what-is-new/ef-core-3.0/?view=aspnetcore-1.1

    【Scaffold-DbContext "Server=xxxx;Database=SQLTestDB;User ID=sqltestdbuser;Password=xxxx;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -UseDatabaseNames -DataAnnotations 】

    2. 本质会生成对应的视图类

    如:UserInfor_View.cs 和 UserInfor_View_encryption.cs ,并加载在EF的上下文中,如:public virtual DbSet<UserInfor_View> UserInfor_View { get; set; }

    然后,通过 entity.ToView("UserInfor_View"); 加载视图。

     

      

    代码调用:和表调用一样

     using (SQLTestDBContext context=new SQLTestDBContext())
    {
         var data = context.Set<UserInfor_View>().ToList();
    }

    !

    • 作       者 : Yaopengfei(姚鹏飞)
    • 博客地址 : http://www.cnblogs.com/yaopengfei/
    • 声     明1 : 如有错误,欢迎讨论,请勿谩骂^_^。
    • 声     明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。
     
  • 相关阅读:
    Java下载文件,中文名乱码(attachment;filename=中文文件名)
    Spring Boot打jar包,排除lombok等scope=provided的依赖
    VirtualBox+WinDbg+Win7调试环境配置
    【编译原理】FIRST集、FOLLOW集算法原理和实现
    epoll EPOLLL、EPOLLET模式与阻塞、非阻塞
    【编译原理】提取左部公因子算法
    编译和阅读WRK源码
    WRK 源码编译使用
    Windows加载器与模块初始化
    关于Win7 x64下过TP保护(应用层)
  • 原文地址:https://www.cnblogs.com/yaopengfei/p/12730223.html
Copyright © 2011-2022 走看看