数据库中的视图简介

为什么要用视图

我们在从数据库中查询某些数据时通常是使用 select * from TableName where condition,例如从公告表中查询2018年5月6号发布的公告信息并且只想让用户看到公告的标题、公告的内容、公告的发布日期,我们通常查询的SQL语句为select AnnounceTitle, AnnounceContent, PublishDate from Announce where PublishDate = '2018-05-06',查询结果如下

而每次要查询2018年5月6号发布的公告信息都要执行一次 select AnnounceTitle, AnnounceContent, PublishDate from Announce where PublishDate = '2018-05-06'未免也太麻烦了,为了解决这个问题就可以用视图,首先可以将查询2018年5月6号发布的公告信息的SQL语句创建为一个视图,创建方式如下:

create view selectInfo as select AnnounceTitle, AnnounceContent, PublishDate from Announce where publishDate = '2018-05-06'

然后只需要执行select * from selectInfo就可以查询2018年5月6号发布的公告信息,而不用每次都写那么长的查询语句

什么是视图

根据W3school上的介绍可知视图是基于 SQL 语句的结果集的可视化的表,也就是说视图就是一张表,既能是表,那么对表的一切操作也可以用于视图,所以视图可以实现曾删改查

更新视图

下面的SQL语句更新了之前创建的视图selectInfo,现在selectInfo视图查询的结构中会显示公告标题和公告内容

alter view selectInfo as select AnnounceTitle, AnnounceContent from Announce where publishDate = '2018-05-06'

删除视图

前面介绍了更新视图操作,这里介绍删除视图操作,执行下面的SQL语句可以删除之前创建的selectInfo视图

drop view selectInfo

通过视图更新表中的数据

这里以前面创建的视图selectInfo为例,在前面我们已经创建了一个selectInfo视图关联了2018年5月6日发布的公告信息,那么我们能否通过selectInfo视图更新2018年5月6日发布的公告信息呢,答案时可以的,通过执行下面的SQL语句可以实现通过视图将2018年5月6日发布的公告信息中的公告标题由“推荐书籍列表”改为“新书推荐”

update selectInfo set AnnounceTitle = '新书推荐'

执行一下select * from selectInfo可以看到通过视图关联的虚拟表中的数据已经更新了

再执行一次select * from Announce可以看到公告表中的数据也更新了,所以我们实现了通过视图更新表中的数据

视图的分类

在视图中我们可以将视图分成系统视图、绑定视图及索引视图

系统视图

从名字上看就可以知道系统视图表示存放一些数据库系统的信息,以SQL Server为例,打开SQL Server数据库进入任何一个用户创建的数据库下打开视图选项,在视图选项下面会看到一个系统视图选项,打开系统视图选项后会看到如下图所示的一堆由 SQl Server 数据库自己创建的视图,这个就是系统视图

系统视图的一个简单运用

假定我们创建了一个数据库名称为db_readmine的数据库,在db_readmine数据库中创建了很多表,db_readmine数据库的表结构如下图所示

如果我忘记了AnnounceTitle字段在那张表中,想知道AnnounceTitle字段位于,其中那张表中,就可以使用一个系统视图INFORMATION_SCHEMA.COLUMNS ,使用方式如下,其中COLUMN_NAME后面跟的是你需要查找的字段的字段名,TABLE_CATALOG 后面跟的是你在哪个数据库中查找该字段

select * from INFORMATION_SCHEMA.COLUMNS 
where COLUMN_NAME = 'AnnounceTitle' and TABLE_CATALOG = 'db_readmine'

这条SQL语句的执行结果如下,下面的结果中的TABLE_CATALOG表示查找的字段所在的数据库,TABLE_SCHEMA表示的是表的架构,TABLE_NAME表示字段所在的表,COLUMN_NAME表示当前查询的字段,通过这个查询结果可知AnnounceTitle是Announce表的字段

查看Announce表后也可以从Announce表中找到AnnounceTitle字段

参考资料

meishadevs欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果。
转载请注明: 【文章转载自meishadevs:数据库中的视图简介

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器