欢迎来到天天文库
浏览记录
ID:9969119
大小:129.51 KB
页数:66页
时间:2018-05-12
《实现sql server数据库中的视图和查询》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、§1视图基本概念一、视图基本概念1.基本表基本表是独立存在的表。在SQLServer中创建了一个基本表,那么可以在表中添加记录,这些记录存放在硬盘上。“学生表”、“课程表”、“成绩表”等等,都是基本表。SQLServer2000实用教程2.视图视图看上去同表似乎一模一样,具有一组命名的字段和数据项,但它其实是一个虚拟的表,在物理上并不实际存在。视图是由查询数据库表产生的,它限制了用户能看到和修改的数据。视图一旦定义后,就可以和基本表一样被查询、被删除,也可以在一个视图基础上再定义新的视图。视图兼有表和查
2、询的特点:与查询相类似的是,视图可以用来从一个或多个相关联的表或视图中提取有用信息;与表相类似的是,视图可以用来更新其中的信息,并将更新结果永久保存在磁盘上。我们可以用视图使数据暂时从数据库中分离成为游离数据,以便在主系统之外收集和修改数据。SQLServer2000实用教程二、视图的优缺点当对通过视图看到的数据进行修改时,相应的基本表的数据也要发生变化,同时,若基本表的数据发生变化,则这种变化也可以自动地反映到视图中。视图有很多优点,主要表现在:1、视点集中视图集中即是使用户只关心它感兴趣的某些特定数
3、据和他们所负责的特定任务。这样通过只允许用户看到视图中所定义的数据而不是视图引用表中的数据而提高了数据的安全性。SQLServer2000实用教程2、简化操作视图大大简化了用户对数据的操作。因为在定义视图时,若视图本身就是一个复杂查询的结果集,这样在每一次执行相同的查询时,不必重新写这些复杂的查询语句,只要一条简单的查询视图语句即可。可见视图向用户隐藏了表与表之间的复杂的连接操作。3、定制数据视图能够实现让不同的用户以不同的方式看到不同或相同的数据集。因此,当有许多不同水平的用户共用同一数据库时,这显得
4、极为重要。SQLServer2000实用教程4、合并分割数据在有些情况下,由于表中数据量太大,故在表的设计时常将表进行水平分割或垂直分割,但表的结构的变化却对应用程序产生不良的影响。如果使用视图就可以重新保持原有的结构关系,从而使外模式保持不变,原有的应用程序仍可以通过视图来重载数据。5、组合分区数据用户可以把来自不同表的两个或多个查询结果组合成单一的结果集。这在用户看来是一个单独的表,称为分区视图。SQLServer2000实用教程6、安全性视图可以作为一种安全机制。通过视图用户只能查看和修改他们所能
5、看到的数据。其它数据库或表既不可见也不可以访问。如果某一用户想要访问视图的结果集,必须授予其访问权限。视图所引用表的访问权限与视图权限的设置互不影响。7、视图的缺点视图的缺点主要表现在其对数据修改的限制上。SQLServer2000实用教程三、使用视图的场合1)表的行或列的子集。2)两个或多个表的联合。3)两个或多个表的连接。4)其他视图的子集。5)视图与表的组合。SQLServer2000实用教程§2创建视图创建视图时应该注意以下情况:①只能在当前数据库中创建视图。②视图中最多只能引用1024列。③如
6、果视图引用的基表或者视图被删除,则该视图不能再被使用,直到创建新的基表或者视图。④如果视图中某一列是函数、数学表达式、常量或者来自多个表的列名相同,则必须为列定义名称。SQLServer2000实用教程⑤当视图所引用不同基表的列中有相同列名时或者希望给视图中的列指定新的列名时则需要重新指定列的别名。⑥不能在视图上创建索引,不能在规则、缺省、触发器的定义中引用视图。⑦当通过视图查询数据时,SQLServer要检查以确保语句中涉及的所有数据库对象存在,而且数据修改语句不能违反数据完整性规则。⑧视图的名称必须
7、遵循标识符的规则,且对每个用户必须是唯一的。此外,该名称不得与该用户拥有的任何表的名称相同。SQLServer2000实用教程注意:一个视图可以基于一个或若干个基表,也可以基于一个或若干个视图,同时也可以基于基表和视图的混合体。SQLServer2000实用教程使用Transact-SQL语言创建视图创建视图的语法格式如下:CREATEVIEW[<数据库名>.][<所有者>.]视图名[(列名[,...n])][WITH{ENCRYPTION
8、SCHEMABINDING
9、VIEW_METADATA}]AS
10、SELECT查询语句[WITHCHECKOPTION]SQLServer2000实用教程参数说明:(1)视图名称必须符合标识符规则。可以选择是否指定视图所有者名称。(2)CREATEVIEW子句中的列名是视图中显示的列名。只有在下列情况下,才必须命名CREATEVIEW子句中的列名:当列是从算术表达式、函数或常量派生的,两个或更多的列可能会具有相同的名称(通常是因为联接),视图中的某列被赋予了不同于派生来源列的名称。当然也可以在SELECT
此文档下载收益归作者所有