mysql中视图的概念_MySql中的视图的概念及应用

视图的基本概念

视图是从一个或几个基本表(或者视图)导出的表。它与基本表不同,是一个虚表。

数据库只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。所以基本表中的数据发生变化,从视图中查询出的数据也就随之改变了。

视图一经定义,就可以和基本表一样被查询、被删除。也可以在一个视图之上再定义新的视图,但对视图的更新(增、删、改)操作则有一定的限制。

视图的优点

视图相比基本表有以下优点:

1.视图能够简化用户的操作

视图机制用户可以将注意力集中在所关心的数据上。如果这些数据不是直接来自基本表,则可以通过定义视图,使数据库看起来结构简单、清晰,并且可以简化用户的数据查询操作。

2.视图是用户能以不同的角度看待同样的数据。

对于固定的一些基本表,我们可以给不同的用户建立不同的视图,这样不同的用户就可以看到自己需要的信息了。

3.视图对重构数据库提供了一定程度的逻辑性。

比如原来的A表被分割成了B表和C表,我们仍然可以在B表和C表的基础上构建一个视图A,而使用该数据表的程序可以不变。

4.视图能够对机密数据提供安全保护

比如说,每们课的成绩都构成了一个基本表,但是对于每个同学只可以查看自己这门课的成绩,因此可以为每个同学建立一个视图,隐藏其他同学的数据,只显示该同学自己的数据。

5.适当的利用视图可以更加清晰的表达查询

有时用现有的视图进行查询可以极大的减小查询语句的复杂程度。

说明:本文章中的用来作为示例的数据表有三个:student、course、sc 数据表具体请看:Mysql数据库中的EXISTS和NOT EXISTS

建立视图

SQL视图建立命令

CREATE VIEW [([,]…)]

AS

[WITH  CHECK  OPTION];

其中,子查询可以是任意复杂的SELECT语句,但通常不允许包含ORDER BY子句和DISTINCT短语(因为子查询是中间结果)。

组成视图的属性列名可以

全部省略或全部指定,如果省略,则隐含由子查询中SELECT目标列中的诸字段组成;

但在下列情况下必须明确指定视图的所有列名:

(1)某个目标列不是单纯的属性名,而是聚集函数或列表达式,或者目标列为*

(2)多表连接时选出了几个同名列作为视图的字段

(3)需要在视图中为某个列启用新的更合适的名字

RDBMS执行CREATE VIEW语句时只是把视图的定义存入数据字典,并不执行其中的SELECT语句。在对视图查询时,按视图的定义从基本表中将数据查出。

建立的视图可以简单的分为以下三类:

行列子集视图

若一个视图是从单个基本表导出的,并且只是去掉了基本表的某些行和某些列,但保留了主码,我盟称这类视图为行列子集视图

例子1.1

建立信息系学生的视图

SQL语句:

CREATE VIEW IS_Student

AS SELECT Sno, Sname, Sage FROM Student WHERE Sdept= 'IS' 本例中省略了视图IS_Student的列名,隐含了由子查询中SELECT子句中的三个列名组成。

2299cbe6aaf1028a25c4dc458a9441b1.png

WITH CHECK OPTION表示对视图进行UPDATE、INSERT和DELETE操作时要保证更新、插入或删除的行满足视图定义中的谓词条件(即子查询中的条件表达式)

例子1.2

建立信息系学生的视图,并要求透过该视图进行的更新操作只涉及信息系学生

SQL语句:

CREATE VIEW IS_Student

AS SELECT Sno, Sname, Sage

FROM Student

WHERE Sdept= 'IS'

WITH CHECK OPTION;

由于在定义IS_Student视图时加上了WITH CHECK OPTION子句,以后对该视图进行插入、修改和删除操作时,RDBMS会自动加上Sdept='IS'的条件:

插入操作:DBMS自动检查Sdept属性值是否为'IS'

如果不是,则拒绝该插入操作

如果没有提供Sdept属性值,则自动定义Sdept为'IS'

修改操作:DBMS自动加上Sdept= 'IS'的条件

删除操作:DBMS自动加上Sdept= 'IS'的条件

视图不仅可以建立在单个基本表上,也可以建立在多个基本表上,或者建立在基本表和视图的基础上。

例子1.3 建立信息系选修了1号课程的学生视图

CREATE VIEW IS_S1(Sno, Sname, Grade)

AS SELECT Student.Sno, Sname, Grade

FROM Student, SC

WHERE Sdept= 'IS' AND

Student.Sno=SC.Sno AND

SC.Cno= '1';

a6f272466752c087e943fba257aadcf8.png

例子1.4建立信息系选修了1号课程且成绩在90分以上的学生的视图

CREATE VIEW IS_S2

AS SELECT Sno, Sname, Grade

FROM IS_S1

WHERE Grade>=90;

a6f272466752c087e943fba257aadcf8.png

带表达式的视图

定义基本表时,为了减少数据库中的冗余数据,表中只存放基本数据,由基本数据经过各种计算派生出的数据一般是不存储的。

但由于视图中的数据并不实际存储,所以定义视图时可以根据应用的需要,设置一些派生属性列。

这些派生属性列由于在基本标中并不实际存在也称他们为

虚拟列,带虚拟列的视图也称为

带表达式的视图

例子2.1 定义一个反映学生出生年份的视图

CREATE VIEW BT_S(Sno, Sname, Sbirth)

AS SELECT Sno, Sname, 2000-Sage

FROM Student;

441f8ce0b8baedf21257d3a7e4540735.png

分组视图

还可以用带有聚集函数和GROUP BY子句的查询来定义视图,这种视图称为分组视图。

例子3.1将学生的学号及他的平均成绩定义为一个视图

CREATE VIEW S_G(Sno, Gavg)

AS SELECT Sno, AVG(Grade) FROM SC GROUP BY Sno;

5176d9b049a3489dcd3d5037fceb83fa.png

由于AS子语句中SELECT语句语句的目标列平均成绩是通过作用聚集函数得到的,所以CREATE VIEW中必须明确定义组成S_G视图的每个属性列名,S_G是一个分组视图。

例子3.2将Student表中所有女生记录定义为一个视图

CREATE VIEW F_Student1(stdnum, name, sex, age, dept)

AS SELECT * FROM Student WHERE Ssex='女';

305740e792bf162fb4b901db3ab91467.png

这里的视图F_Student1是由子查询“SELECT *”建立的,需要明确定义组成F_Student1视图的每个属性列名。

查询视图

视图定义以后,用户就可以像查询基本表一样查询视图了。

因此从用户角度看,查询视图与查询基本表相同。

不过,所有对视图的查询,都会被数据库管理软件解释成对基本数据表的查询,因为视图是在基本表的基础上抽象出来的。

例子4.1在信息系学生的视图中找出年龄小于20岁的学生

SELECT Sno, Sage

FROM IS_Student

WHERE Sage<20;

IS_Student视图的定义(视图定义例1):

CREATE VIEW IS_Student

AS SELECT Sno, Sname, Sage

FROM Student

WHERE Sdept= 'IS';

DBMS转换后的查询语句为:

SELECT Sno, Sage

FROM Student

WHERE Sdept='IS' AND Sage<20;

更新视图

更新视图是指通过视图插入、删除和修改数据。

由于视图是不实际存储数据的虚表,因此对视图的更新最终要转换为对基本表的更新。

从用户角度看,更新视图与更新基本表相同;RDBMS将之转化为对基本表的更新操作。

为防止用户通过视图对数据进行更新时,有意无意地对不属于视图范围内的基本表数据进行操作,可以在定义视图时加上WITH CHECK OPTION子句。

这样在视图上增删改数据时,RDBMS会检查视图定义中的条件,若不满足条件,则拒绝执行该操作。

例子5.1将信息系学生视图IS_Student中学号95002的学生姓名改为“刘辰”

UPDATE IS_Student

SET Sname='刘辰'

WHERE Sno='95002';

转换后的语句:

UPDATEStudent

SET Sname='刘辰'

WHERE Sno='95002' AND Sdept='IS';

在关系数据库中,并不是所有的视图都是可更新的,因为有些视图的更新不能唯一地有意义地转换成对相应基本表的更新。

一般地,

行列子集视图是可更新的,除此之外,还有一些视图理论上是可更新的,但他们的确切特征还是尚待研究的课题,还有些视图从理论上就是不可更新的。

删除视图

删除视图的语句格式:DROP VIEW ;

删除视图对生成视图的基本表没有任何影响。

删除基表时,由该基表导出的所有视图定义没有被删除,但已不能使用,必须使用DROP VIEW显式删除。

例子6.1

删除视图BT_S:

DROP VIEW BT_S;

删除视图IS_S1:

DROP VIEW IS_S1;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/264611.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JQuery常用的代码片段

2019独角兽企业重金招聘Python工程师标准>>> JQuery常用的代码片段 JQuery在当前众多网站开发中都有用到。他简易的操作以及对各个浏览器的兼容性&#xff0c;被广大的开发者一致看好。 下面是一些常用实用的 JQuery 代码片段。看看有没有需要收藏的吧&#xff1a; …

linux环境配置

在安装linux之前首先要明白linux系统的功能特性&#xff0c;linux是多少位 的&#xff0c;对要使用的工具要有大体的了解&#xff0c;那样就不至于在之后的安装中耽误太多时间&#xff0c;比如安装的系统是32位的就要安装与之对应的工具。我们大体上了解一下linux能支持的又比较…

tomcat 启动速度慢背后的真相

1. tomcat 启动慢 在线上环境中&#xff0c;我们经常会遇到类似的问题&#xff0c;就是tomcat 启动比较慢&#xff0c;查看内存和cpu,io都是正常的&#xff0c;但是启动很慢&#xff0c;有的时候长达几分钟&#xff0c;这到底是什么原因导致的。 1.1 tomcat 获取随机值阻塞 ​ …

[导入]相片: 23853741.jpg

文章来源:http://img.blog.163.com/photo/NdAK9XEb2a-KOR7zpDWpAA/588564176302178421.jpg转载于:https://www.cnblogs.com/baiyirui/archive/2008/04/27/1173117.html

手摇泵PHP一32_节能手摇泵的制作方法

本实用新型属于液压动力装置技术领域&#xff0c;特指一种节能手摇泵。背景技术&#xff1a;如图1-2所示&#xff0c;目前&#xff0c;手摇泵采用分体式结构&#xff0c;比如&#xff0c;左横向出油通道和右横向出油通道是装配在泵体上的&#xff0c;由于零件较多&#xff0c;所…

掌握 ASP.NET 之路:自定义实体类简介 来源 :msdn

ADODB.RecordSet 和常常被遗忘的 MoveNext 的时代已经过去&#xff0c;取而代之的是 Microsoft ADO.NET 强大而又灵活的功能。我们的新武器就是 System.Data 名称空间&#xff0c;它的特点是具有速度极快的 DataReader 和功能丰富的 DataSet&#xff0c;而且打包在一个面向对象…

HTML入门学习 -- HTML基础知识

打算按照 HTML -> CSS –> JavaScript –> jQuery –> HTML5 –> WebGL 的顺序&#xff0c;简略学习一下Web前端技术。 因为不是搞Web的&#xff0c;只需要大概过一下有个印象就行&#xff0c;每一项花费3天到一周时间走马观花的看看。 编辑器就选择Sublime Tex…

并发编程实战(一)

并发编程的三个核心问题: 分工 : 高效的拆解任务分给线程同步 : 线程之间的协作互斥 : 保证同一时刻只允许一个线程访问共享资源这个其实不难理解,做个简单的比喻,我们团队做一个项目的时候肯定是先分配任务(分工),然后等到任务完成进行合并对接(同步),在开发过程中,使用版本控…

java pdf打印_Java 打印PDF文档

本文将介绍如何在Java应用程序中打印PDF文档。一般有以下三种常见打印方式&#xff1a;静默打印显示打印对话框打印打印PDF时自定义纸张大小使用工具&#xff1a;Free Spire.PDF for Java创建运行环境&#xff1a;方式 1&#xff1a;通过官网下载组件&#xff0c;解压后将lib文…

微信支付配置参数:支付授权目录、回调支付URL

一、开通微信支付的首要条件是&#xff1a;认证服务号或政府媒体类认证订阅号&#xff08;一般认证订阅号无法申请微信支付&#xff09;二、微信支付分为老版支付和新版支付&#xff0c;除了较早期申请的用户为老版支付&#xff0c;现均为新版微信支付。三、公众平台微信支付开…

[导入]关于阶乘的两个常见算法及一个相关面试题

摘要: 本文首先给出了阶乘的数学定义&#xff0c;然后说明了它的两种简单算法&#xff0c;最后提供了一个很有意思的与阶乘相关的面试题的思路。 阅读全文Anders Cui 2008-05-19 12:12 发表评论文章来源:http://www.cnblogs.com/anderslly/archive/2008/05/19/factorial-algor…

autoresetevent java_[原创]AutoResetEvent, ManualResetEvent的Java模拟

AutoResetEvent, ManualResetEvent是C#中常用的线程同步方法&#xff0c;在Java中可以模拟&#xff0c;AutoResetEvent使用Semaphore&#xff0c;增加的是许可证数量&#xff0c;程序里只有一个许可证&#xff0c;那么当这个许可被使用后&#xff0c;就会自动锁定。相反&#x…

用Jfree实现条形柱状图表,java代码实现

用Jfree实现条形柱状图表&#xff0c;java代码实现。可经经常使用于报表的制作&#xff0c;代码自己主动生成后能够自由查看。能够自由配置图表的各个属性&#xff0c;用来达到自己的要求和目的package test1;import org.jfree.chart.*; import org.jfree.chart.plot.*; import…

bzoj 2160: 拉拉队排练

Description 艾利斯顿商学院篮球队要参加一年一度的市篮球比赛了。拉拉队是篮球比赛的一个看点&#xff0c;好的拉拉队往往能帮助球队增加士气&#xff0c;赢得最终的比赛。所以作为拉拉队队长的楚雨荨同学知道&#xff0c;帮助篮球队训练好拉拉队有多么的重要。拉拉队的选拔工…

java long double精度丢失_long long类型转double类型部分精度丢失问题

我最近做了一道题&#xff0c;一个64位(unsigned __int64)范围内的数输出其除以1000的值&#xff0c;并按四舍五入保留小数点后三位。我刚开始直接写WA&#xff0c;结果发现当数比较大的时候&#xff0c;结果后几位精度总会丢失&#xff0c;只好手动模拟了一个&#xff0c;水过…

从服务器上自动更新系统补丁

对于经常重系统的用户或公司,每次安装系统后,必须得从微软网站上面下载补丁,这样很浪费时间. 如何从自己服务器上自动更新系统补丁,方法如下: 服务器端 服务器端需要安装一个更新服务器软件,如:SUS (下载地址http://www.onlinedown.net/soft/35844.htm) 客户端设置 开始 -- 运行…

搭建于 Cubieboard 之上的超小型实时监控平台 - mjpg篇

2019独角兽企业重金招聘Python工程师标准>>> 运行于 Cubieboard开发板 之上的个人笔记博客 http://cb.e-fly.org:81/archives/system-camera-monitor-mjpg-streamer.html 原文作者&#xff1a;Cannikin原文链接&#xff1a;http://forum.cubietech.com/forum ... p…

架构-浅谈MySQL数据库优化

主从复制博文&#xff1a;http://lizhenliang.blog.51cto.com/7876557/1290431 读写分离博文&#xff1a;http://lizhenliang.blog.51cto.com/7876557/1305083 MySQL-MMM博文&#xff1a;http://lizhenliang.blog.51cto.com/7876557/1354576 &#xff08;一&#xff09;数据库部…

java base64解码出错_Java Base64解码错误及解决方法

问题提出&#xff1a;自己在做一个小网站充当练手&#xff0c;但是前端图片经过base64加密后传往后端在解码。但是一直都有问题&#xff0c;请大神赐教public static string base64toimg(string src) throws ioexception {string uuid uuid.randomuuid().tostring();stringbui…

PPT图片内嵌文字效果

【摘要】在报纸杂志上我们经常看到&#xff0c;有些图片中可以嵌入文字&#xff0c;如下图所示的效果&#xff1a;今天我们一起来学习一下这种效果是怎样生成的。 【正文】以下的操作步骤为PowerPoint 2013版本。 一 插入图片并编辑图片在【插入-联机图片】中搜索需要的图片。…