数据库中视图的作用

视图是从一个或几个基本表(或视图)导出的表。它与基本表不同,是一个虚表。数据库只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。所以基本表中的数据发生变化,从视图中查询出的数据也就随之改变了。从这个意义上讲,视图就像一个窗口,透过它可以看到数据库中自己感兴趣的数据及其变化。

既然视图的定义是基于基本表的,哪为什么还要定义视图呢?这是因为合理地使用视图能够带来许多好处:

1、 视图能简化用户操作

视图机制使用户可以将注意力集中在所关心地数据上。如果这些数据不是直接来自基本表,则可以通过定义视图,使数据库看起来结构简单、清晰,并且可以简化用户的的数据查询操作。例如,那些定义了若干张表连接的视图,就将表与表之间的连接操作对用户隐藏起来了。换句话说,用户所作的只是对一个虚表的简单查询,而这个虚表是怎样得来的,用户无需了解。

2、 视图使用户能以多种角度看待同一数据

视图机制能使不同的用户以不同的方式看待同一数据,当许多不同种类的用户共享同一个数据库时,这种灵活性是非常必要的。

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

数据的物理独立性是指用户的应用程序不依赖于数据库的物理结构。数据的逻辑独立性是指当数据库重构造时,如增加新的关系或对原有的关系增加新的字段,用户的应用程序不会受影响。层次数据库和网状数据库一般能较好地支持数据的物理独立性,而对于逻辑独立性则不能完全的支持。

在关许数据库中,数据库的重构造往往是不可避免的。重构数据库最常见的是将一个基本表“垂直”地分成多个基本表。例如:将学生关系Student(Sno,Sname,Ssex,Sage,Sdept),

分为SX(Sno,Sname,Sage)和SY(Sno,Ssex,Sdept)两个关系。这时原表Student为SX表和SY表自然连接的结果。如果建立一个视图Student:

CREATE VIEW Student(Sno,Sname,Ssex,Sage,Sdept)

AS

SELECT SX.Sno,SX.Sname,SY.Ssex,SX.Sage,SY.Sdept

FROM SX,SY

WHERE SX.Sno=SY.Sno;

这样尽管数据库的逻辑结构改变了(变为SX和SY两个表了),但应用程序不必修改,因为新建立的视图定义为用户原来的关系,使用户的外模式保持不变,用户的应用程序通过视图仍然能够查找数据。

当然,视图只能在一定程度上提供数据的逻辑独立,比如由于视图的更新是有条件的,因此应用程序中修改数据的语句可能仍会因为基本表构造的改变而改变。

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

有了视图机制,就可以在设计数据库应用系统时,对不同的用户定义不同的视图,使机密数据不出现在不应该看到这些数据的用户视图上。这样视图机制就自动提供了对机密数据的安全保护功能。例如,Student表涉及全校15个院系学生数据,可以在其上定义15个视图,每个视图只包含一个院系的学生数据,并只允许每个院系的主任查询和修改本原系学生视图。

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

例如经常需要执行这样的查询“对每个学生找出他获得最高成绩的课程号”。可以先定义一个视图,求出每个同学获得的最高成绩:

CREATE VIEW VMGRADE

AS

SELECT Sno,MAX(Grade) Mgrade

FROM SC

GROUP BY Sno;

然后用如下的查询语句完成查询:

SELECT SC.Sno,Cno

FROM SC,VMGRADE

WHERE SC.Sno = VMGRADE.Sno AND SC.Grade = VMGRADE.Mgrade;

MySQL数据库中视图的作用相关推荐

  1. mysql数据库中count的作用_MySQL数据库中的count的用法

    1.概念 在开发系统的时候,可能经常需要计算一个表的行数,比如一个交易系统的所有变更记录总数.这时候你可能会想,一条select count(*) from t 语句不就解决了吗? 但是,会发现随着系 ...

  2. mysql数据库中 索引的作用是什么意思_什么是数据库索引,索引有什么作用

    数据库索引是为了增加查询速度而对表字段附加的一种标识.见过很多人机械的理解索引的概念,认为增加索引只有好处没有坏处.这里想把之前的索引学习笔记总结一下: 首先明白为什么索引会增加速度,DB在执行一条S ...

  3. mysql数据库中count的作用_详解 MySQL中count函数的正确使用方法

    1. 描述 在MySQL中,当我们需要获取某张表中的总行数时,一般会选择使用下面的语句 select count(*) from table; 其实count函数中除了*还可以放其他参数,比如常数.主 ...

  4. mysql leave的作用_MySQL数据库中DELIMITER的作用

    以下的文章主要是向大家描述的是MySQL数据库中delimiter的作用是什么?我们一般都认为这个命令和存储过程关系不大,到底是不是这样的呢?以下的文章将会给你相关的知识,望你会有所收获. 下面是一个 ...

  5. mysql delimiter的作用_MySQL数据库中delimiter的作用概述

    以下的文章主要是向大家描述的是MySQL数据库中delimiter的作用是什么?我们一般都认为这个命令和存储过程关系不大,到底是不是这样的呢?以下的文章将会给你相关的知识,望你会有所收获. 其实就是告 ...

  6. echarts导入mysql数据库_Echarts最新:Django中从mysql数据库中获取数据传到echarts方式_爱安网 LoveAn.com...

    关于"Echarts"的最新内容 聚合阅读 这篇文章主要介绍了基于vue+echarts 数据可视化大屏展示的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随 ...

  7. mysql怎么删除临时表里的数据_谈谈MySQL数据库中临时表的应用

    MySQL在很多情况下都会用到临时表总结一下什么时候会用到临时表 什么是临时表MySQL用于存储一些中间结果集的表临时表只在当前连接可见当关闭连接时Mysql会自动删除表并释放所有空间. 以下讨论的是 ...

  8. MySQL数据库中导入导出方法以及工具介绍

    MySQL数据库中导入导出方法以及工具介绍 1.MySQLimport的语法介绍: mysqlimport位于mysql/bin目录中,是mysql的一个载入(或者说导入)数据的一个非常有效的工具.这 ...

  9. MySQL数据库中常见的日志文件汇总!

    一个优秀的Java后端开发工程师一定要掌握MySQL数据库,而日志文件记录了影响MySQL数据库的各种类型活动,因此也成为其必须要掌握的知识.今天千锋ava培训小编就给大家介绍MySQL数据库中常见的 ...

最新文章

  1. 【Unity 3D】学习笔记三十六:物理引擎——刚体
  2. python的数据清理_Python数据清理,清洗
  3. Java基础:网络编程
  4. Jerry Wang 2014年在SAP社区CRM板块的积分曾经一直占据第一
  5. 【好文】为什么必须学好.Net Core?怎样弯道超车新年高薪?这样做,一周就够了!(文末彩蛋)...
  6. Python3.6学习笔记(四)
  7. 8. Geometric problems
  8. bytevalue_Java Short类byteValue()方法及示例
  9. linux svn 服务 关闭,Linux下启动、关闭SVN服务
  10. How-to: 利用Visual Studio升级Windows Phone 7工程
  11. 前后端分离中后端常用的响应类
  12. java 页面接收参数_详解SpringMVC——接收请求参数和页面传参
  13. AD20如何用图片做丝印的图案,丝印层导入logo
  14. 25个优秀的UI设计资源下载
  15. Spring Security 安全框架概述 与 快速入门
  16. 易源接口showapi的使用
  17. arcgis地理配准_【更新70篇】地理数据科学技术文章合集,欢迎大家点赞、在看、转发三连!...
  18. python-onvif库基本使用
  19. Chloe Orm的使用(一)
  20. vector的底层实现!(万字长文详解!)

热门文章

  1. APP测试面试题汇总基础+进阶
  2. 向六种植物学习创业的真谛
  3. java实现数据同步
  4. 写一个函数判断输入的数字是否为素数 (js)
  5. 串口通信--两台PC机之间的简单传输
  6. 《詹姆斯·高斯林Java白皮书1996自译》00:概览
  7. onsubmit函数触发事件
  8. Map线程安全几种实现方法
  9. java把时间戳转换成时间_(转)java时间与时间戳互转
  10. python sqlachemy模糊查询报错