数据库视图详解

数据库视图详解

- 定义:

视图(View)是从一个或多个表(或视图)导出的表。视图与表(有时为与视图区别,也称表为基本表——Base Table)不同,视图是一个虚表,即视图所对应的数据不进行实际存储,数据库中只存储视图的定义,在对视图的数据进行操作时,系统根据视图的定义去操作与视图相关联的基本表。

视图就像一个窗口,透过它可以看到数据库中自己感兴趣的数据及其变化

- 视图的创建

SQL Server创建视图的语法:


CREATE VIEW  

[ < database_name > .] [ < owner > .]  

    view_name [ ( column [ ,...n ] ) ]  

   [ WITH < view_attribute > [ ,...n ] ]  

AS  

select_statement
   [ WITH CHECK OPTION ]  

< view_attribute > ::=  

 { ENCRYPTION | SCHEMABINDING |  

      VIEW_METADATA }

WITH check OPTION 表示对视图进行UPDATE、INSERT、delete操作时要保证更新、删除、或插入的行满足视图定义中的谓词条件

  • 例1:建立显示年龄大于20岁的学生学号、姓名、性别等信息的S_view1
create view S_view1
as
select sno,sname,sex
from s
where age>20  ;
  • 例2:创建v_score1,要求基本表来源:S,C,SC;选择的字段为:S表中的sno、sname;C表中的cname及SC表中score;要求查询的数据为学号为20030001的学生的考试成绩。

create view v_score1
As
Select s.sno,s.sname,c.cname,sc.score
From s,c,sc
Where s.sno=sc.sno and c.cno=sc.cno and sno=  “  20030001”  ;
  • 例3:建立信息系学生的视图,并要求进行修改和插入操作时仍需保证该视图只有信息系的学生
Create view IS_Student
AS
select Sno,Sname,Sage
from Student
where Sdept=‘IS‘
with check option;
    在上述视图上加了with check option子句,以后对该视图进行插入、修改和删除操作时,RDBMS都会自动加上Sdept=‘IS‘

行列子集视图: 如果一个视图只是从单个基本表导出的,并且只是去掉了某些行列,但保留了主键,称之为行列子集视图如上面例1和例3就是一个行列子集视图

- 查询视图

视图定义好之后就可以像对基本表一样进行查询了

  • 例 4 在信息系学生中查找年龄小于20的
select Sno,Sage
from IS_Student
where Sage<20;

对应的转换后的语句为

select Sno,Sage
from Student
where Sdept=‘IS‘ and Sage<20;

有时候,单单一个视图并不能查询到需要的数据,如例5

  • 例5 查询选修了1号课程的信息系学生
select IS_Student.Sno,Sname
from IS_Student,SC
where IS_Student.Sno=SC.Sno and SC.Cno=‘1‘;

上述查询涉及视图IS_Student和基本表SC共同查询得到结果

- 更新视图

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

由于视图是不实际存储数据的虚表,因此对视图的更新最终要转换为对基本表的更新。所以为了防止用户对数据有意无意的操作,可在定义视图时加上 with check option 如例3

  • 例 6 将信息系学生视图IS_Student 好、中学号为200215122的学生姓名改为"张大屁"
Update IS_Student
set Sname=‘张大屁‘
where Sno=‘2000215122‘;

转换后对应的语句为

Update Student
set Sname=‘张大屁‘
where Sno=‘200215122‘ and Sdept=‘IS‘;
  • 例7 向信息系学生视图中插入一个新的学生记录 学号为200215129 姓名为 ‘李红’ 年龄为21
insert into
IS_Student
values(‘200215129‘,‘李红‘,21);

转换后的语句为

insert into
Student(Sno.Sname,Sage,Sdept)
values(‘200215129‘,‘李红‘,21,‘IS‘);
  • 例8 删除信息系学生学号为200215111的学生
delete
from IS_Student
where Sno=‘200215111‘;

转换后的语句为

delete
from Student
where Sno=‘200215111‘ and Sdept=‘IS‘;

视图更新的限制

如果视图定义中有如下子句则不能更新

  • 分组 使用group by 和 Having
  • 联结
  • 子查询
  • 并集
  • 聚集函数 MAX MIN COUNT AVG
  • DISTINCT
  • 导出列

- 视图的删除

视图删除格式为

DROP VIEW <视图名> [CASCADE] ;

视图删除后视图的定义将从数据字典中删除,使用CASCADE是级联删除,删除此视图上导出的视图

  • 例9 删除视图IS_Student
Drop VIEW IS_Student;

- 视图的优点

- 1简化用户操作

视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使用户不必为以后的操作每次都指定全部的条件。

- 2对重构数据库提供了一定程度上的逻辑独立性

视图可以使应用程序和数据库表在一定程度上独立。如果没有视图,应用一定是建立在表上的。有了视图之后,程序可以建立在视图之上,从而程序与数据库表被视图分割开来。

- 3安全性

 通过视图用户只能查询和修改他们所能见到的数据。数据库中的其他数据则既看不见也取不到。数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定行和特定的列上。通过视图,用户可以被限制在数据的不同子集上。

视图的缺点

● 性能:SQL Server必须把视图的查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么,即使是视图的一个简单查询,SQL Server也把它变成一个复杂的结合体,需要花费一定的时间。

● 修改限制:当用户试图修改视图的某些行时,SQL Server必须把它转化为对基本表的某些行的修改。对于简单视图来说,这是很方便的,但是,对于比较复杂的视图,可能是不可修改的。

时间: 2024-11-05 18:20:08

数据库视图详解的相关文章

Mysql数据库的索引和视图详解

Mysql数据库的索引和视图详解 索引的概念 数据库的索引与书籍中的目录类似在一本书中,无需阅读整本书,利用目录就可以快速查找所需信息书中的目录是一个词语列表,其中注明了包含各个词的页码数据库索引在数据库中,索引数据库程序无需对整个表进行扫描,就可以在其中找到所需数据数据库中的索引是某个表中一列或若干列的集合,以及物理标识这些值的数据页的逻辑指针清单 索引的作用 设置了合适的索引之后,数据库利用葛总快速的定位技术,能够大大加快查询速率特别是当表很大时,或者查询涉及到多个表时,使用索引可使查询加快

学习ASP .NET MVC5官方教程总结(七)Edit方法和Edit视图详解

学习ASP .NET MVC5官方教程总结(七)Edit方法和Edit视图详解 在本章中,我们研究生成的Edit方法和视图.但在研究之前,我们先将 release date 弄得好看一点.打开Models\Movie.cs 文件.先添加一个引用: <span style="font-size:14px;">using System.ComponentModel.DataAnnotations;</span> 然后在Movie类中添加以下代码: [Display(

创建物化视图详解(图解)

创建物化视图详解 一,什么是物化视图 物化视图是包括一个查询结果的数据库对象,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表.物化视图存储基于远程表的数据,也可以称为快照. 二,作用. 在类似统计功能中,查询操作是无可避免,而这些查询操作如果很频繁,对整体数据库性能是很致命的.而物化视图实现远程数据源与本地数据的实时同步,也就是定时刷新,通过在本地创建物化视图可以大大提高查询效率. 三,流程图: 当用户要跨本地数据库,访问另外一个数据库表中的数据时,本地数据库中必须创建了远程数据库

ORACLE物化视图详解

一.物化的一般用法物化视图是一种特殊的物理表,"物化"(Materialized)视图是相对普通视图而言的.普通视图是虚拟表,应用的局限性大,任何对视图的查询,oracle都实际上转换为视图SQL语句的查询.这样对整体查询性能的提高,并没有实质上的好处. 1.物化视图的类型ON DEMAND.ON COMMIT.二者的区别在于刷新方法的不同,ON DEMAND顾名思义,仅在该物化视图"需要"被刷新了,才进行刷新(REFRESH),即更新物化视图,以保证和基表数据的一

MySQL数据库优化详解(收藏)

MySQL数据库优化详解 mysql表复制 复制表结构+复制表数据mysql> create table t3 like t1;mysql> insert into t3 select * from t1;mysql索引 ALTER TABLE用来创建普通索引.UNIQUE索引或PRIMARY KEY索引ALTER TABLE table_name ADD INDEX index_name (column_list)ALTER TABLE table_name ADD UNIQUE (colu

MySQL数据库备份详解

原文:MySQL数据库备份详解 对于任何数据库来说,备份都是非常重要的 数据库复制不能取代备份的作用 比如我们由于误操作,在主数据库上删除了一些数据,由于主从复制的时间很短,在发现时,从数据库上的数据可能也已经被删除了, 我们不能使用从数据库上的数据来恢复主数据库上的数据,只能通过备份进行误删除数据的恢复 一. 备份的分类 1.按备份的结果来分: 逻辑备份 其备份结果为SQL语句,适合于所有存储引擎,恢复时需要较多时间,逻辑备份时,对于MyISAM存储引擎是需要进行锁表操作的,通过使用的mysq

ORACLE数据库备份与恢复详解

ORACLE数据库备份与恢复详解 学习过程中的总结,有兴趣不妨看看,如果有不对的地方,高手不要留情!! Oracle的备份与恢复有三种标准的模式,大致分为两 大类,备份恢复(物理上的)以及导入导出(逻辑上的),而备份恢复又可以根据数据库的工作模式分为非归档模式(Nonarchivelog-style) 和归档模式(Archivelog-style),通常,我们把非归档模式称为冷备份,而相应的把归档模式称为热备份,他们的关系如下所示 三种方式各有优点,我们做个比较(这个是用Fireworks画的,

Yii 框架里数据库操作详解-[增加、查询、更新、删除的方法 &#39;AR模式&#39;]

public function getMinLimit () {        $sql = "...";        $result = yii::app()->db->createCommand($sql);        $query = $result->queryAll();         return array (                $query [0] ['max'],         );    } $connection=Yii::

H2数据库使用 详解

H2最完整的资料下载地址: http://download.csdn.net/detail/yixiaoping/5956595 H2数据库使用 H2数据库介绍 常用的开源数据库:H2,Derby,HSQLDB,MySQL,PostgreSQL.其中H2,HSQLDB类似,十分适合作为嵌入式数据库使用,其它的数据库大部分都需要安装独立的客户端和服务器端.H2的优势:1.h2采用纯Java编写,因此不受平台的限制.2.h2只有一个jar文件,十分适合作为嵌入式数据库试用.3.性能和功能的优势 H2