体育建设网站,教你如何做网络营销推广,外链发布平台有哪些,wordpress 删除版权文章目录 简介创建视图修改视图删除视图总结参考文献 简介
视图#xff0c;即VIEW#xff0c;是SQL中的一个重要概念#xff0c;它其实是一种虚拟表(非实体数据表#xff0c;本身不存储数据)。
视图类似于编程中的函数#xff0c;也可以理解成是一个访问数据的接口。 从… 文章目录 简介创建视图修改视图删除视图总结参考文献 简介
视图即VIEW是SQL中的一个重要概念它其实是一种虚拟表(非实体数据表本身不存储数据)。
视图类似于编程中的函数也可以理解成是一个访问数据的接口。 从上图可以看出视图实际上是一种介于数据表和用户之间的虚拟表。正常情况下用户本来就可以跟数据表直接交互那在中间放一个view层相比有什么好处呢
我简单介绍一下我的理解
针对开发人员来讲可以简化每次查询的步骤对于一些固定化的查询可以将其保存成视图下次直接调用视图而不需要重新书写查询(类似一个查询函数)。权限管理功能(安全性)。可以针对不同的用户制定不同的查询视图。用户只对部分数据有查看权限而不可窥全豹。
比如说一张表有用户的身份证信息我不想对外部人员提供这种敏感字段但我必须给他提供这张表中的其他信息比如说用户的性别、年龄等那我就有两种方式来解决这个问题
新建一个实体表。把原表的身份证字段去掉剩下数据导入这个新实体表对外提供新实体表(缺陷显而易见空间浪费同步更新等优点是查的快)使用view筛掉身份证字段。没有空间占用自动同步更新等但每次查询都要重新计算因此查的会慢
创建视图
以MySQL为例其创建视图的语法
create view view_name as
select column_1, column_2,...
from table_name
where condition可以看到视图是建立在SQL查询的基础上封装成了一个视图。
这样就会基于SQL查询的结果集来形成一张虚拟表。但是这个虚拟表并不占用数据存储空间每次调用视图都是跑一遍查询将结果集缓存在内存中的过程所以被称为是虚拟表视图每次查出来的数据都是新的。
还有比较重要的一点上面的语法中只用了一张表只是为了简化演示实际上view封装的SQL查询跟正常的查询没有区别你可以join任意多个表来创建一个视图。
当视图创建完之后就可以直接作为一张表来使用了
select * from view_name另外允许嵌套视图的存在。即可以在视图的基础上基础创建视图。
create view view_name as
select column_1, column_2
from view_name_a
where condition或者把视图作为子查询的内表都可以。
实际上在某些情况下你可以这么写
delete from view_name where condition据说如果视图是基于单表的那源table中符合情况的数据大概率会被删掉但如果视图中join了多个表那么这种delete基本不会成功因为修改会涉及多个实体表。
这个需要注意不要对视图进行任何update操作 因为有可能会改掉底层数据。
修改视图
alter view view_name as
select column_1, column_2
from view_name
where condition可以看到修改视图的语法跟创建视图完全一样。
我觉得alter内部就是先删除老视图然后再重新create。。。
提一句SQLite这个轻量级数据库并不支持修改视图即只能使用CREATE和DROP如果想要修改视图的话只能先DROP后重新CREATE。
删除视图
drop view view_name总结
视图只是虚拟表它只是封装了底层数据表的查询接口因此有些RDBMS不支持对视图创建索引。(有的支持如新版本的SQL server)。
再次总结下视图的好处
安全性视图是基于底层实体数据表的使用视图时一般不会通过视图来对底层数据进行修改大部分情况下都会限制这种修改操作在一定程度上保证了底层表的安全性。(但是在某些情况下的确是可以通过update视图来改变底层数据的所以视图的安全性并不绝对)另外针对不同用户提供不同的视图来借此开放不同的数据权限也是安全性的一个体现简单清晰视图是对SQL查询的一个封装实际上就是一个函数把(可能会多次使用的)复杂的查询提前写成模块既简化了调用又方便了查询的复用。同时嵌套视图这一设计类似模块化编程大大提升了查询的可复用。
那接下来还有最重要的一个问题视图跟临时表相比有什么优劣(前面简单介绍了一下)
首先临时表其实可以分两种一种是SQL中的临时表即在一次查询中临时存在的表查询连接结束后临时表就会被自动释放另一种是我们口头意义上的临时表是可以持久保存的实体表其实就是新建一张表然后把数据放进去。
视图胜在可以自动更新啊如果要手动维护一张实体临时表的话太麻烦每次有更新之后还需要手动导进去。
参考文献
12丨视图在SQL中的作用是什么它是怎样工作的