SQLServer之视图篇

摘要:
语法--语法deletestu_insert_viewwherecondition;删除之前:删除:--例子deletestu_insert_viewwhere姓名='刘邦';select*fromstu_insert_view;select*fromstuTable;显示结果:6总结1.使用场景:1.经常用到的查询,或较复杂的联合查询应当创立视图,这是会优化性能的2.涉及到权限管理方面,比如某表中的部分字段含有机密信息,不应当让低权限的用户访问到的情况,这时候给这些用户提供一个适合他们权限的视图,供他们阅读自己的数据就行了。
1 视图介绍
视图是从一个或者几个基本表(或视图)导出的表。它与基本表不同,是一个虚表。数据库中只存放视图的定义,而不存在视图对应的数据,这些数据仍然存放在原来的基本表中。所以一旦基本表中的数据发生变化,从视图中查询的数据也就随之改变了。从这个意义上讲,视图就像一个窗口,透过它可以看到数据库中自己感兴趣的数据及其变化。
1.1 视图的概述

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

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

1.2 使用视图的目的与好处

1.聚焦特定数据:使用户只能看到和操作与他们有关的数据,提高了数据的安全性。
2.简化数据操作:使用户不必写复杂的查询语句就可对数据进行操作。
3.定制用户数据:使不同水平的用户能以不同的方式看到不同的数据。
4.合并分离数据:视图可以从水平和垂直方向上分割数据,但原数据库的结构保持不变。

2 创建视图

语法:
[withcheckoption]--强制所有通过是同修改的数据,都要满足select语句中指定的条件
select查询语句
as
[withencryption]--用于加密视图的定义,用户只能查看不能修改。
[(列名表)]
createview视图
先创建一个学生表
usemarvel_db;
--创建一个学生表
createtablestuTable(
idintidentity(1,1)primarykey,--id主键,自增
namevarchar(20),
genderchar(2),
ageint,
)
--往表中插入数据
insertintostuTable(name,gender,age)
values
('刘邦','男',23),
('项羽','男',22),
('韩信','男',21);
insertintostuTable(name,gender,age)values('萧何','男',24)
创建视图
--创建视图
if(exists(select*fromsys.objectswherename='stu_view'))
dropviewstu_view
go
--stu_view()不实用参数,默认为基础表中的列名称
--注意createview必须是批处理里面的语句
createviewstu_view
as
selectname,agefromstuTablewhereage>20;
go
--执行视图
select*fromstu_view;
查询结果:

SQLServer之视图篇第1张

3 修改视图

go
alterviewstu_view
as
select*fromstuTablewhereage>22;
go
select*fromstu_view
显示结果:
SQLServer之视图篇第2张

4 删除视图

go
--语法
dropviewview_name1,view_name2,......,view_nameN;
--该语句可以同时删除多个视图,只要在删除各视图名称之间用逗号分隔即可。
例如:删除视图 stu_view
--语法
dropviewstu_view;
--该语句可以同时删除多个视图,只要在删除各视图名称之间用逗号分隔即可。
5 通过视图管理表中的数据
(1).通过视图向基本表中插入数据

注意:

1.可通过视图向基表中插入数据,但插入的数据实际上存放在基表中,而不是存放在视图中。

2.如果视图引用了多个表,使用insert语句插入的列必须属于同一个表。

3.若创建视图时定义了“with check option”选项,则使用视图向基表中插入数据时,必须保证插入后的数据满足定义视图的限制条件。

--(1).通过视图向基本表中插入数据
go
createviewstu_insert_view(编号,姓名,性别,年龄)
as
selectid,name,gender,agefromstuTable;
go
select*fromstuTable;
---插入一条数据
insertintostu_insert_viewvalues('孙权','男',34);
----查看插入记录之后表中的内容。
select*fromstuTable;
显示结果:

SQLServer之视图篇第3张

(2).通过视图修改基本表的数据

--查看修改之前的数据
select*fromstuTable;
显示结果:

SQLServer之视图篇第4张

--修改数据
updatestu_insert_viewset年龄=30where姓名='刘邦';
--查看修改后的数据
select*fromstuTable;
结果显示:
SQLServer之视图篇第5张

(3).通过视图删除基本表的数据

注意:

1.要删除的数据必须包含在视图的结果集中。

2.如果视图引用了多个表时,无法用delete命令删除数据。

语法

--语法
deletestu_insert_viewwherecondition;

删除之前:

SQLServer之视图篇第6张

删除:

--例子
deletestu_insert_viewwhere姓名='刘邦';
select*fromstu_insert_view;
select*fromstuTable;
显示结果:
SQLServer之视图篇第7张
6总结
1.使用场景:
1.经常用到的查询,或较复杂的联合查询应当创立视图,这是会优化性能的
2.涉及到权限管理方面,比如某表中的部分字段含有机密信息,不应当让低权限的用户访问到的情况,这时候给这些用户提供一个适合他们权限的视图,供他们阅读自己的数据就行了。
2.视图与表的区别:

1.视图是已经编译好的SQL语句,是基于SQL语句的结果集的可视化表,而表不是;
2.视图(除过索引视图)没有实际的物理记录,而基本表有;
3.表示内容,视图是窗口;
4.表占物理空间,而视图不占物理空间,视图只是逻辑概念的存在;
5.视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全角度说,视图可以防止用户接触数据表,从而不知表结构;
6.表属于全局模式的表,是实表;视图数据局部模式的表,是虚表;
7.视图的建立和删除只影响视图本身,不影响对应的基本表。

转载自:https://blog.csdn.net/marvel_java/article/details/53353475

免责声明:文章转载自《SQLServer之视图篇》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇四分位数Echarts实践-实现3D地球下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

python轻量级orm框架 peewee常用功能速查

peewee常用功能速查 peewee 简介 Peewee是一种简单而小的ORM。它有很少的(但富有表现力的)概念,使它易于学习和直观的使用。 常见orm数据库框架 Django ORM peewee SQLAlchemy Django ORM 优点:易用,学习曲线短和Django紧密集合,用Django时使用约定俗成的方法去操作数据库缺点:Quer...

HIVE优化学习笔记

概述 之前写过关于hive的已经有两篇随笔了,但是作者依然还是一枚小白,现在把那些杂七杂八的总结一下,供以后查阅和总结。今天的文章介绍一下hive的优化。hive是好多公司都在使用的东西,也有好多大公司进行定制化二次优化,比如鹅厂的Thive等。所以学习hive至关重要,本文只针对大众版免费开源的hive。官网地址:http://hive.apache.o...

el-autocomplete select事件传递多个参数

转自:https://yuyuye958.github.io/2019/03/10/el-autocomplete/ 问题 <el-autocomplete v-model="state" :fetch-suggestions="querySearchAsync" placeholder="请输入内容" @select="handle...

sql 二进制文件的导入导出

/*--bcp-二进制文件的导入导出 支持image,text,ntext字段的导入/导出image适合于二进制文件;text,ntext适合于文本数据文件 注意:导入时,将覆盖满足条件的所有行导出时,将把所有满足条件的行也出到指定文件中 此存储过程仅用bcp实现邹建   2003.08-----------------*/ /*--调用示例--数据导出e...

MySQL 百万级分页优化(Mysql千万级快速分页)(转)

http://www.jb51.net/article/31868.htm 以下分享一点我的经验 一般刚开始学SQL的时候,会这样写 复制代码 代码如下: SELECT * FROM table ORDER BY id LIMIT 1000, 10; 但在数据达到百万级的时候,这样写会慢死 复制代码 代码如下: SELECT * FROM t...

impala presto SparkSql性能测试对比

  目标是为测试impala presto SparkSql谁的性能更佳,以下结果底层查询的都是普通textfile snappy压缩后数据,规模为15台机器,若以orcfile、parquet速度能快数倍 impala与presto性能相当,SparkSql逊色不少。 目前看presto相比impala 1、与hive实时共享元数据,impala需要...