视图的规划与操作课件

上传人:仙*** 文档编号:240909170 上传时间:2024-05-17 格式:PPTX 页数:54 大小:739.12KB
返回 下载 相关 举报
视图的规划与操作课件_第1页
第1页 / 共54页
视图的规划与操作课件_第2页
第2页 / 共54页
视图的规划与操作课件_第3页
第3页 / 共54页
点击查看更多>>
资源描述
SQL Server第第9 9章章 视图的规划与操作视图的规划与操作 视图是用户查看数据库内数据的一种方式,它相当于一个虚拟表,用户通过它来浏览表中感兴趣的部分或全部数据。使用视图可以将用户注意力聚焦在特定的数据上,并达到数据安全保护的目的,还能简化数据查询和处理操作。第第9 9章章 视图的规划与操作视图的规划与操作9.1 视图的作用与规划视图的作用与规划9.2 视图操作视图操作9.3 视图应用综合实例分析视图应用综合实例分析9.1 视图的作用与规划视图是关系数据库系统提供给用户以多种角度观察数据视图是关系数据库系统提供给用户以多种角度观察数据库中数据的重要机制。库中数据的重要机制。视图对应于三级模式中的外模式(用户模式),它是从视图对应于三级模式中的外模式(用户模式),它是从一个或几个基本表导出的表,由一个或几个基本表导出的表,由CREATE VIEW命令创命令创建。建。视图又称为虚拟表,因为数据库中存放着视图的定义及视图又称为虚拟表,因为数据库中存放着视图的定义及其关联的基本表名等信息,而不存放视图对应的数据。其关联的基本表名等信息,而不存放视图对应的数据。视图一经定义,就可以和基本表一样被查询、被删除,视图一经定义,就可以和基本表一样被查询、被删除,但对视图的更新(增加、删除、修改)操作则有一定的但对视图的更新(增加、删除、修改)操作则有一定的限制限制。9.1.1 视图的作用数据库使用视图机制主要有以下优点:数据库使用视图机制主要有以下优点:(1)视图能够简化用户的操作)视图能够简化用户的操作视图机制使用户可以将注意力集中在所关心的数据上。视图机制使用户可以将注意力集中在所关心的数据上。(2)视图使用户能以多种角度看待同一数据)视图使用户能以多种角度看待同一数据视图机制能使不同岗位、不同职责、不同需求的用户视图机制能使不同岗位、不同职责、不同需求的用户按照自己的方式看待同一数据按照自己的方式看待同一数据(3)视图为数据库重构提供了一定程度的逻辑独)视图为数据库重构提供了一定程度的逻辑独立性。立性。(4)视图能够对机密数据提供安全保护)视图能够对机密数据提供安全保护对不同的用户定义不同的视图,使机密数据不出现在对不同的用户定义不同的视图,使机密数据不出现在不应看到这些数据的用户视图上,这样视图机制就自不应看到这些数据的用户视图上,这样视图机制就自动提供了对机密数据的安全保护功能。动提供了对机密数据的安全保护功能。9.1.2 视图的规划在设计好数据库的全局逻辑结构后,还应该在设计好数据库的全局逻辑结构后,还应该根据局部应用的需求,结合根据局部应用的需求,结合DBMS的特点,设的特点,设计局部应用的数据库局部逻辑结构,即设计计局部应用的数据库局部逻辑结构,即设计更符合局部用户需要的用户视图。更符合局部用户需要的用户视图。定义数据库全局逻辑结构主要从系统的时间定义数据库全局逻辑结构主要从系统的时间效率、空间效率、易维护等角度出发。效率、空间效率、易维护等角度出发。定义用户局部视图时可以注重考虑用户的习定义用户局部视图时可以注重考虑用户的习惯与方便。惯与方便。9.1.2 视图的规划定义用户局部视图时可以主要考虑以下几个方面:定义用户局部视图时可以主要考虑以下几个方面:(1)使用更符合用户习惯的别名)使用更符合用户习惯的别名在设计数据库总体结构时,同一关系和属性具有唯一的名字,在设计数据库总体结构时,同一关系和属性具有唯一的名字,但是,在局部应用中,对同一关系或属性,有自己更加习惯的但是,在局部应用中,对同一关系或属性,有自己更加习惯的名字。我们可以用视图机制在设计用户视图时重新定义某些属名字。我们可以用视图机制在设计用户视图时重新定义某些属性名,使其与用户习惯一致,以方便使用。性名,使其与用户习惯一致,以方便使用。(2)可以对不同级别的用户定义不同的视图,以保证系统的安)可以对不同级别的用户定义不同的视图,以保证系统的安全性。全性。(3)简化用户对系统的使用)简化用户对系统的使用如果某些局部应用中经常要使用某些很复杂的查询,为了方便如果某些局部应用中经常要使用某些很复杂的查询,为了方便用户,可以将这些复杂查询定义为视图,用户每次只对定义好用户,可以将这些复杂查询定义为视图,用户每次只对定义好的视图进行查询,大大简化了用户的使用。的视图进行查询,大大简化了用户的使用。9.2 视图操作 9.2.1 9.2.1 创建视图创建视图SQL SERVER 提供了使用提供了使用SSMS和和SQL 命令两种方法来创建视图。命令两种方法来创建视图。在创建或使用视图时应该注意到以下情况:在创建或使用视图时应该注意到以下情况:只能在当前数据库中创建视图,在视图中最多只能引用只能在当前数据库中创建视图,在视图中最多只能引用1024 列列;如果如果视图引用的表被删除视图引用的表被删除,则当使用该视图时将返回一条错误信,则当使用该视图时将返回一条错误信息,如果创建具有相同的表的结构新表来替代已删除的表视图则息,如果创建具有相同的表的结构新表来替代已删除的表视图则可以使用,否则必须重新创建视图;可以使用,否则必须重新创建视图;如果视图中某一列是函数、数学表达式、常量或来自多个表的列如果视图中某一列是函数、数学表达式、常量或来自多个表的列名相同,则名相同,则必须为列定义名字必须为列定义名字;定义视图的查询语句不能包含定义视图的查询语句不能包含COMPUTE或或COMPUTEBY子句;子句;不能包含不能包含ORDER BY子句,除非在子句,除非在SELECT语句的选择列表中也语句的选择列表中也有一个有一个TOP子句;不能包含子句;不能包含INTO关键字;不能引用临时表或表变关键字;不能引用临时表或表变量。量。不能在视图上创建全文索引、规则、默认值和不能在视图上创建全文索引、规则、默认值和after触发器;不能触发器;不能在规则、缺省、触发器的定义中引用视图;在规则、缺省、触发器的定义中引用视图;不能创建临时视图不能创建临时视图,也不能在临时表上建立视图。,也不能在临时表上建立视图。1使用SQL SERVER企业管理器来创建视图在在SQL SERVER中使用中使用SSMS来创建视图。来创建视图。步骤如下:步骤如下:启动启动SSMS,登录到指定的服务器;,登录到指定的服务器;打开要创建视图的数据库文件夹,选中打开要创建视图的数据库文件夹,选中视图视图图标,此时在右面的窗格中显示当前数据库的图标,此时在右面的窗格中显示当前数据库的所有视图,右击图标,在弹出菜单中选择所有视图,右击图标,在弹出菜单中选择新建新建视图视图选项,打开选项,打开新建视图新建视图对话框。在对话框。在新新建视图建视图对话框中共有四个区:表区、列区对话框中共有四个区:表区、列区SQL script 区、数据结果区,当然刚打开时是空白。区、数据结果区,当然刚打开时是空白。2Transact-SQL 命令创建视图使用使用Transact-SQL 命令命令CREATE VIEW 创建视创建视图。图。语法格式:语法格式:CREATE VIEW .view_name (column ,.n )WITH ,.n AS select_statement WITH CHECK OPTION :=ENCRYPTION|SCHEMABINDING|VIEW_METADATA 2Transact-SQL 命令创建视图参数说明:参数说明:(1)view_name:是视图的名称。视图名称必须符合标识是视图的名称。视图名称必须符合标识符规则。可以选择是否指定视图所有者名称。符规则。可以选择是否指定视图所有者名称。(2)Column:是视图中的列名。只有在下列情况下,才是视图中的列名。只有在下列情况下,才必须命名必须命名CREATE VIEW中的列:当列是从算术表达式、中的列:当列是从算术表达式、函数或常量派生的,两个或更多的列可能会具有相同的函数或常量派生的,两个或更多的列可能会具有相同的名称(通常是因为联接),视图中的某列被赋予了不同名称(通常是因为联接),视图中的某列被赋予了不同于派生来源列的名称,以便符合用户习惯。还可以在于派生来源列的名称,以便符合用户习惯。还可以在SELECT语句中指派列名。如果未指定语句中指派列名。如果未指定column,则视图,则视图列与列与SELECT语句中的列具有相同的名称。语句中的列具有相同的名称。2Transact-SQL 命令创建视图(3)AS:是视图要执行的操作。是视图要执行的操作。(4)select_statement:是定义视图的是定义视图的SELECT语句。该语语句。该语句可以使用多个表或其它视图。若要从创建视图的句可以使用多个表或其它视图。若要从创建视图的SELECT子句所引用的对象中选择,必须具有适当的权限。子句所引用的对象中选择,必须具有适当的权限。视图不必是具体某个表的行和列的简单子集。视图不必是具体某个表的行和列的简单子集。可以用具有任意复杂性的可以用具有任意复杂性的 SELECT 子句,使用多个表或子句,使用多个表或其它视图来创建视图。其它视图来创建视图。在索引视图定义中,在索引视图定义中,SELECT语句必须是单语句必须是单个表的语句或带有可选聚合的多表个表的语句或带有可选聚合的多表JOIN。在在select_statement中可以使用函数。中可以使用函数。select_statement可使用多个由可使用多个由UNION或或UNION ALL分分隔的隔的SELECT语句。语句。2Transact-SQL 命令创建视图(5)WITH CHECK OPTION:强制视图上执行的所有数据强制视图上执行的所有数据修改语句都必须符合由修改语句都必须符合由 select_statement设置的准则。通设置的准则。通过视图修改行时,过视图修改行时,WITH CHECK OPTION可确保提交修改可确保提交修改后,仍可通过视图看到修改的数据。后,仍可通过视图看到修改的数据。(6)WITH ENCRYPTION:表示表示 SQL Server 加密包含加密包含CREATE VIEW语句文本的系统表列。使用语句文本的系统表列。使用WITH ENCRYPTION可防止将视图作为可防止将视图作为SQL Server复制的一部分复制的一部分发布。发布。(7)SCHEMABINDING:将视图绑定到架构上。将视图绑定到架构上。(8)VIEW_METADATA:指定为引用视图的查询请求浏览指定为引用视图的查询请求浏览模式的元数据时,模式的元数据时,SQL Server 将向将向DBLIB、ODBC和和OLE DB API返回有关视图的元数据信息,而不是返回基表或表返回有关视图的元数据信息,而不是返回基表或表。3视图创建实例【例例9-1】使用简单的使用简单的 CREATE VIEW下例创建具有简单下例创建具有简单 SELECT 语句的视图。当需要频繁地查语句的视图。当需要频繁地查询列的某种组合时,简单视图非常有用。询列的某种组合时,简单视图非常有用。USE 教学管理教学管理IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME=courses_VIEW)DROP VIEW courses_VIEWGOCREATE VIEW courses_VIEWAS SELECT cno,cname,cbname,cedi,cpubFROM courseGO【例例9-2】使用使用WITH ENCRYPTION下例使用下例使用WITH ENCRYPTION选项和内置函数,使用函数时,选项和内置函数,使用函数时,必须为派生列指定列名。必须为派生列指定列名。USE 教学管理教学管理CREATE VIEW stu_avg(sno,sname,AVG_SCORE)WITH ENCRYPTIONAS SELECT S.sno,sname,AVG(grade)FROM student S,enrollment EWHERE S.sno=E.snoGROUP BY S.sno,snameGOselect c.id,c.text from syscomments c,sysobjects owhere c.id=o.id and o.name=stu_avg【例例9-3】使使用用WITH CHECK OPTION下下例例显显示示名名为为ISonly的的视视图图,该该视视图图使使得得只只能能对对信信息息学学院院的的学生做数据修改。学生做数据修改。USE 教学管理教学管理CREATE VIEW ISonlyAS SELECT sno,sssn,sname,ssex,smtel,scity,smajor,sdepa,sgpaFROM studentWHERE sdepa=信息学院信息学院WITH CHECK OPTIONGOinsert into isonlyvalues(s060501,11111111,张张,男男,1111,宁波宁波,会计学会计学,会计学院会计学院,162)【例例9-4】如如果果如如本本章章第第一一节节概概述述所所述述,若若某某一一全全国国连连锁锁的的销销售售企企业业将将销销售售数数据据表表按按照照省省份份进进行行水水平平分分割割,那那我我们们可以使用以下可以使用以下视图视图重新装重新装载载表的数据。表的数据。Create view sales_table As Select*from sales_beijing union Select*from sales_tianjin union Select*from sales_shanghai 9.2.2 特殊类型视图简介 索引视图索引视图:建立唯一聚簇索引的视图为索引视图。:建立唯一聚簇索引的视图为索引视图。分分区区视视图图:分分区区视视图图是是通通过过对对具具有有相相同同结结构构的的成成员员表表使用使用UNION ALL UNION ALL 所定义的视图。所定义的视图。信信息息架架构构视视图图:MicrosoftMicrosoft提提供供的的用用于于SQL SQL ServerServer元元数数据据的的内内部部视视图图,这这些些视视图图符符合合SQL-92SQL-92标标准准中中的的INFORMATION_SCHEMAINFORMATION_SCHEMA定义。定义。1索引视图 由由于于视视图图返返回回的的结结果果集集与与具具有有行行列列结结构构的的表表有有着着相相同同的的表表格格形形式式,并并且且我我们们可可以以在在SQL SQL 语语句句中中像像引引用用表表那那样样引引用用视视图图,所所以以我我们们常常把把视视图称为图称为虚表虚表。标标准准视视图图的的数数据据的的物物理理存存放放依依然然是是在在数数据据库库的的基基本本表表中中,只只是是在在执执行行引引用用了了视视图图的的查查询询时时,SQL SQL Server Server 才才把把相相关关的的基基本本表表中中的的数数据据合合并并成成视视图图的的逻逻辑辑结结构构。所所以以,这这类类视视图图也也称称做做存存储储查询查询。问题:问题:由于是在执行了引用了视图的查询时,由于是在执行了引用了视图的查询时,SQL SQL Server Server 才把相关的基本表中的数据合并成视图的才把相关的基本表中的数据合并成视图的逻辑结构,那么当查询所引用的视图包含大量的逻辑结构,那么当查询所引用的视图包含大量的数据行或涉及到对大量数据行进行合计运算或连数据行或涉及到对大量数据行进行合计运算或连接操作,毋庸置疑,接操作,毋庸置疑,动态地创建视图结果集将给动态地创建视图结果集将给系统带来沉重的负担,尤其是经常引用这种大容系统带来沉重的负担,尤其是经常引用这种大容量视图。量视图。如何解决?如何解决?索引视图:索引视图:建立唯一聚簇索引的视图称做索引视图建立唯一聚簇索引的视图称做索引视图 在视图上创建索引可存储创建索引时存在的数据。在视图上创建索引可存储创建索引时存在的数据。优优点点:查查询询优优化化器器开开始始在在查查询询中中使使用用视视图图索索引引,而而不不是是直直接接在在FROMFROM子子句句中中命命名名视视图图。这这样样一一来来,可可从从索索引引视视图图检检索索数数据据而而无无需需重重新新编编码码,由由此此带带来来的的高高效效率率也也使现有查询获益。使现有查询获益。缺缺点点:它它降降低低了了对视图基基表表数数据据的的修修改改操操作作的的速速度度,且且维护索引索引视图比比维护基基础表的索引更表的索引更为复复杂。适适合合情情况况:非非常常频频繁繁地地检检索索视视图图数数据据,或或很很少少修修改改基基表数据时。表数据时。在视图上创建聚集索引之前,该视图必须满足下列要求:在视图上创建聚集索引之前,该视图必须满足下列要求:1.1.当当 执 行行 CREATE CREATE VIEWVIEW语 句句 时,ANSI_NULLSANSI_NULLS和和QUOTED_IDENTIFIERQUOTED_IDENTIFIER选项必必须设置置为ONON。2.2.为执行行所所有有CREATE CREATE TABLETABLE语句句以以创建建视图引引用用的的表,表,ANSI_NULLS ANSI_NULLS 选项必必须设置置为ONON。3.该该视视图图所所引引用用的的对对象象仅仅包包括括基基础础表表而而不不包包括括其其它的视图;它的视图;4 4.视视图图引引用用的的所所有有基基表表必必须须与与视视图图位位于于同同一一个个数数据库中,并且所有者也与视图相同。据库中,并且所有者也与视图相同。5.5.必须使用必须使用SCHEMABINDINGSCHEMABINDING选项创建视图。选项创建视图。SCHEMABINDINGSCHEMABINDING将视图绑定到基础基表的架将视图绑定到基础基表的架构。构。6.6.如果视图引用了用户自定义函数,那么在创如果视图引用了用户自定义函数,那么在创建这些用户自定义函数时也必须使用建这些用户自定义函数时也必须使用SCHEMABINDINGSCHEMABINDING选项选项 ;7.7.视图必须以视图必须以owner.objectnameowner.objectname的形式来使用的形式来使用所引用的表或用户自定义函数;所引用的表或用户自定义函数;8.8.视图中的表达式所引用的所有函数必须是确视图中的表达式所引用的所有函数必须是确定性的。定性的。9.9.视图中的视图中的SELECTSELECT语句不能包含下列语句不能包含下列T-SQLT-SQL语法元素语法元素*选择列表不能使用选择列表不能使用*或或table_name.*table_name.*语法指定列。必须语法指定列。必须 显式给出列名。显式给出列名。*不能在多个视图列中指定用作简单表达式的表的列名。不能在多个视图列中指定用作简单表达式的表的列名。*派生表。派生表。*行集函数。行集函数。*UNION UNION 运算符。运算符。*子查询。子查询。*外联接或自联接。外联接或自联接。*TOP TOP 子句。子句。*ORDER BY ORDER BY 子句。子句。*DISTINCT DISTINCT 关键字。关键字。*COUNT(*)COUNT(*)(允许(允许COUNT_BIG(*)COUNT_BIG(*)。)。)*AVGAVG、MAXMAX、MINMIN、STDEVSTDEV、STDEVPSTDEVP、VARVAR或或VARPVARP聚合函数。聚合函数。注意:注意:通常而言,可以在视图上创建多个索引,但是应该记住,在视图上所创建的第一个索引必须是聚簇索引,然后才可以创建其它的非聚簇索引。如如果果准准备备为为视视图图创创建建索索引引,在在执执行行CREATE INDEX命命令以前,您必须确保以下条件令以前,您必须确保以下条件:*CREATE INDEX命令的执行者必须是视图的所有者;命令的执行者必须是视图的所有者;*在执行创建索引命令期间,在执行创建索引命令期间,ANSI_NULLS、ANSI_PADDING、ANSI_WARNINGS、ARITHABORT、CONCAT_NULL_YIELDS_NULL、QUOTED_IDENTIFIERS诸诸选选项项应应被被设设置置成成ON状态;状态;*NUMERIC_ROUNDABORT选项被设置为选项被设置为OFF状态;状态;*视图不能包括视图不能包括text、ntext、image类型的数据列;类型的数据列;*如如果果视视图图定定义义中中的的SELECT语语句句指指定定了了一一个个GROUP BY子子句句,则则唯唯一一聚聚集集索索引引的的键键只只能能引引用用在在GROUP BY子子句句中中指定的列。指定的列。2 2分区视图分区视图 分区视图在一个或多个服务器间水平连接一分区视图在一个或多个服务器间水平连接一组成员表中的分区数据,使数据看起来就象来自组成员表中的分区数据,使数据看起来就象来自一个表。一个表。Microsoft SQL Server 区分本地分区视图区分本地分区视图和分布式分区视图。和分布式分区视图。在本地分区视图中,所有的参与表和视图驻留在在本地分区视图中,所有的参与表和视图驻留在同一个同一个 SQL Server 实例上。实例上。在分布式分区视图中,至少有一个参与表驻留在在分布式分区视图中,至少有一个参与表驻留在不同的(远程)服务器上。此外,不同的(远程)服务器上。此外,SQL Server 还区分可更新的分区视图和作为基础表只读复本还区分可更新的分区视图和作为基础表只读复本的视图。的视图。在实现分区视图之前,在实现分区视图之前,必须先水平分割表必须先水平分割表。原始表被分成若干个较小的成员表。每个成员原始表被分成若干个较小的成员表。每个成员表包含与原始表相同数量的列,并且每一列具表包含与原始表相同数量的列,并且每一列具有与原始表中的相应列同样的特性(如数据类有与原始表中的相应列同样的特性(如数据类型、大小、排序规则)。型、大小、排序规则)。成员表设计好后,每个表基于键值的范围成员表设计好后,每个表基于键值的范围存储原始表的一块水平区域。键值范围基于分存储原始表的一块水平区域。键值范围基于分区列中的数据值。区列中的数据值。例例如如,正正在在将将一一个个顾顾客客信信息息 Customer Customer 表表分分区区成成三三个表。这些表的个表。这些表的 CHECK CHECK 约束为:约束为:-OnServer1:CREATETABLECustomer_33(CustomerIDINTPRIMARYKEYCHECK(CustomerIDBETWEEN1AND32999),.-Additionalcolumndefinitions)-OnServer2:CREATETABLECustomer_66(CustomerIDINTPRIMARYKEYCHECK(CustomerID BETWEEN33000AND65999),.-Additionalcolumndefinitions)-OnServer3:CREATETABLECustomer_99(CustomerIDINTPRIMARYKEYCHECK(CustomerID BETWEEN66000AND99999),.-Additionalcolumndefinitions)生成分布式分区视图的方式生成分布式分区视图的方式 在在每每一一个个含含有有在在其其它它成成员员服服务务器器上上执执行行分分布布式式查查询询所所需需连连接接信信息息的的成成员员服服务务器器上上添添加加链链接接服服务务器器定定义义。这这将将使使得得分分布布式式分分区区视视图图能能够够访访问问其其它它服服务务器上的数据。器上的数据。建以下分布式分区视图:建以下分布式分区视图:CREATEVIEWCustomersASSELECT*FROMCompanyDatabase.TableOwner.Customers_33UNIONALLSELECT*FROMServer2.CompanyDatabase.TableOwner.Customers_66UNIONALLSELECT*FROMServer3.CompanyDatabase.TableOwner.Customers_993信息架构视图 信信息息架架构构视视图图基基于于SQL-92SQL-92标标准准中中针针对对架架构构视视图图的的定定义义,这这些些视视图图独独立立于于系系统统表表,提提供供了了关于关于SQL ServerSQL Server元数据的内部视图。元数据的内部视图。信信息息架架构构视视图图的的最最大大优优点点是是,即即使使我我们们对对系系统统表表进进行行了了重重要要的的修修改改,应应用用程程序序也也可可以以正正常常地地使使用用这这些些视视图图进进行行访访问问。因因此此对对于于应应用用程程序序来来说说,只只要要是是符符合合SQL-92SQL-92标标准准的的数数据据库库系系统统,使用信息架构视图总是可以正常工作的。使用信息架构视图总是可以正常工作的。表9-2 常用的信息架构视图(部分)信息架构视图信息架构视图描描 述述CHECK_CONSTRAINTS返返回回有有关关列列或或过过程程参参数数的的信信息息,如如是是否否允允许许空值,是否为计算列等。空值,是否为计算列等。COLUMN_DOMAIN_USAGE当当前前数数据据库库中中每每个个带带有有用用户户定定义义数数据据类类型型的的列列在在该该视视图图中中占占一一行行。该该信信息息架架构构视视图图返返回回当前用户对其拥有权限的对象的有关信息。当前用户对其拥有权限的对象的有关信息。COLUMN_PRIVILEGES每每一一个个带带有有特特权权的的列列在在该该视视图图中中占占一一行行,这这个个特特权权是是由由当当前前数数据据库库中中的的当当前前用用户户授授予予的的,或或者者授授予予了了当当前前数数据据库库中中的的当当前前用用户户。该该信信息息架架构构视视图图返返回回当当前用户对拥有特权的列的相关信息。前用户对拥有特权的列的相关信息。COLUMNS返返回回当当前前数数据据库库中中当当前前用用户户可可以以访访问问的的所所有有列列及及其其基本信息。基本信息。在访问信息架构视图时,必须同时说明视图所属在访问信息架构视图时,必须同时说明视图所属模式,即采用以下语法格式:模式,即采用以下语法格式:INFORMATION_SCHEMA.view_name例如,我们要得到某个表有多少列,可以使用以例如,我们要得到某个表有多少列,可以使用以下语句:下语句:SELECTCOUNT(*)FROMINFORMATION_SCHEMA.COLUMNSWHERETABLE_NAME=mytable9.2.3 9.2.3 视图的修改、重命名和删除视图的修改、重命名和删除 1修改视图修改视图 修改一个先前创建的视图的定义,使用修改一个先前创建的视图的定义,使用ALTER VIEW语句。语句。ALTER VIEW语句不影语句不影响相关的存储过程或触发器,也不更改权限。响相关的存储过程或触发器,也不更改权限。语法格式:语法格式:ALTER VIEW .view_name(column,.n)WITH,.nASselect_statementWITHCHECKOPTION:=ENCRYPTION|SCHEMABINDING|VIEW_METADATA参数说明:参数说明:如如果果原原来来的的视视图图定定义义是是用用WITH WITH ENCRYPTIONENCRYPTION或或CHECK CHECK OPTIONOPTION创创建建的的,那那么只有在么只有在ALTER VIEWALTER VIEW中也包含这些选项时,这些选项才有效。中也包含这些选项时,这些选项才有效。如如果果使使用用ALTER ALTER VIEWVIEW更更改改当当前前正正在在使使用用的的视视图图,SQL SQL ServerServer将将在在该该视视图图上上放放一一个个排排它它架架构构锁锁。当当锁锁已已授授予予,并并且且该该视视图图没没有有活活动动用用户户时时,SQL SQL Server Server 将将从从过过程程缓缓存存中中删删除除该该视视图图的的所所有有复复本本。引引用用该该视视图图的的现现有有计计划将继续保留在缓存中,但当唤醒调用时将重新编译。划将继续保留在缓存中,但当唤醒调用时将重新编译。ALTER ALTER VIEWVIEW可可应应用用于于索索引引视视图图。然然而而,ALTER ALTER VIEWVIEW将将无无条条件件地地除除去去视视图图上的所有索引。上的所有索引。【例例9-59-5】更改视图更改视图下下例例创创建建称称为为All_teachersAll_teachers的的视视图图,该该视视图图包包含含全全部部的的教教师师,并并将将该该视视图图的的查查询询权权授授予予所所有有用用户户。但但是是由由于于该该视视图图中中包包含含了了教教师师的的编编号号、身身份份证证号号等等个个人人信信息息,需需使使用用ALTER ALTER VIEWVIEW替替换换该该视视图图,不不包包括括编编号号、身身份份证证号号等等个个人人信信息,以保护教师个人隐私。息,以保护教师个人隐私。-CREATEaVIEWFROMtheteacertablethatcontainsallteachers.CREATEVIEWAll_teacher(tno,tssn,tname,tmtel,tcity,tdepa,trank)ASSELECTtno,tssn,tname,tmtel,tcity,tdepa,trankFROM教学管理教学管理.teacherGO-Grant SELECTpermissionson the VIEW topublic.GRANTSELECTONAll_teacherTOpublicGO-TheVIEWneedstobechangedtoexcludethetno,tssn,tcityattributeofallteachersALTERVIEWAll_teacher(tname,tmtel,tdepa,trank)ASSELECTtname,tmtel,tdepa,trankFROM教学管理教学管理.teacherGO2 2视图重命名视图重命名 使用系统存储过程使用系统存储过程sp_rename 对已创建的视图进行重命名。对已创建的视图进行重命名。语法格式:语法格式:sp_renameobjname=object_name,newname=new_name,objtype=object_type【例例9-6】将例将例9-5中称为中称为All_teacher的视图重命名。的视图重命名。语法格式:语法格式:exec sp_rename All_teacher,All_teacher_view3 3删除视图删除视图 从从当当前前数数据据库库中中删删除除一一个个或或多多个个视视图图。可可执执行行DROP VIEW语语句。句。语法格式:语法格式:DROPVIEWView_name,.n【例例9-79-7】下例删除下例删除stu_avgstu_avg视图。视图。USE教学管理教学管理IFEXISTS(SELECTTABLE_NAMEFROMINFORMATION_SCHEMA.VIEWSWHERETABLE_NAME=stu_avg)DROPVIEWstu_avgGO9.2.4 9.2.4 查询视图查询视图 视视图图定定义义后后,用用户户就就可可以以象象对对基基本本表表一一样样对对视视图进行查询了。图进行查询了。【例例9-89-8】如如果果要要查查询询信信息息学学院院每每个个学学生生的的情情况,只要从视图况,只要从视图ISonlyISonly查询即可。查询即可。Select*FromISonly【例例9-99-9】创创建建信信息息学学院院每每个个学学生生的的成成绩绩视视图图,包包括括学学生生的的学学号号、姓名、所选课程号、课程名,成绩,并进行查询。姓名、所选课程号、课程名,成绩,并进行查询。USE教学管理教学管理IFEXISTS(SELECTTABLE_NAMEFROMINFORMATION_SCHEMA.VIEWSWHERETABLE_NAME=ISstu_score)DROPVIEWISstu_scoreGOCREATEVIEWISstu_score(sno,sname,cno,cname,grade)ASSELECTS.sno,sname,C.cno,cname,gradeFROMstudentS,enrollmentE,offeringO,courseCWHERES.sno=E.snoANDE.ono=O.onoANDO.cno=C.cnoANDsdepa=信息学院信息学院GO9.2.5 9.2.5 更新视图更新视图 更新视图是指通过视图来插入(更新视图是指通过视图来插入(INSERT)、删除)、删除(DELETE)和修改()和修改(UPDATE)数据。由于视图是不实)数据。由于视图是不实际存储数据的虚表,因此对视图的更新,最终要转换为对际存储数据的虚表,因此对视图的更新,最终要转换为对基本表的更新。基本表的更新。Microsoft SQL Server 以两种方法增强可更新视图的类别:以两种方法增强可更新视图的类别:uINSTEAD OF触发器触发器 u分区视图分区视图【例例9-109-10】在在例例9-39-3中中,ISonlyISonly是是一一可可更更新新视视图图,但但由由于于视视图图使使用用了了with with CHECK CHECK OPTIONOPTION选选项项,只只允允许许更更新新信信息息学学院院学学生生数数据据。下下面面例例子子说说明明,如如果果没没有有with with CHECK CHECK OPTIONOPTION选选项项,则则不不能能保保护护非非视视图图数数据据库库被被插插入入、修修改改和和删除。删除。-首先,创建首先,创建会计学院会计学院学生视图,不带学生视图,不带with CHECK OPTION选项选项-再用再用INSERT语句通过语句通过ACConly视图插入一工商管理视图插入一工商管理学院的学生学院的学生-然后输入前面不能通过然后输入前面不能通过ISonlyISonly视图插入的学生元组。视图插入的学生元组。通通过过视视图图对对数数据据进进行行更更新新与与删删除除时时需需要要注注意意到到以下几个问题:以下几个问题:(1 1)不不带带with with CHECK CHECK OPTIONOPTION选选项项的的视视图图,能能够够插插入入非非视视图图数数据据,因因为为数数据据最最终终存存储储在在视视图图所所引引用用的的基基本本表表,但但插插入入后后,不不在在视视图图数数据据集集,故故无无法通过视图查询该数据;法通过视图查询该数据;(2 2)执执行行UPDATE UPDATE DELETEDELETE时时,所所删删除除与与更更新新的的数数据据,必必须须包包含含在在视视图图结结果果集集中中,否否则则失失败败,例例子子中中通通过过ACConlyACConly视视图图对对S060601S060601学学生生数数据据的的修修改和删除操作均失败;改和删除操作均失败;(3 3)如如果果视视图图引引用用多多个个表表时时,无无法法用用DELETE DELETE 命命令令删删除除数数据据,若若使使用用UPDATEUPDATE则则应应与与INSERTINSERT操操作作一一样,被更新的列必须属于同一个表。样,被更新的列必须属于同一个表。9.3 9.3 视图应用综合实例分析视图应用综合实例分析 【例例9-129-12】一般学生信息视图(视图一般学生信息视图(视图1 1)由于学生的一些个人私密信息如:身份证号、出生日期、家庭地由于学生的一些个人私密信息如:身份证号、出生日期、家庭地址、家庭电话等信息是不能随便透露的,为保证学生信息安全,址、家庭电话等信息是不能随便透露的,为保证学生信息安全,于是为一般用户创建一般学生信息视图如下:于是为一般用户创建一般学生信息视图如下:USE教学管理教学管理IFEXISTS(SELECTTABLE_NAMEFROMINFORMATION_SCHEMA.VIEWSWHERETABLE_NAME=G_Stu_VIEW)DROPVIEWG_Stu_VIEWGOCREATE VIEW G_Stu_VIEW(sno,sname,ssex,scity,sdepa,smajor)ASSELECTsno,sname,ssex,scity,sdepa,smajorFROMstudentGO【例例9-139-13】教师基本信息视图(视图教师基本信息视图(视图2 2)USE教学管理教学管理IFEXISTS(SELECTTABLE_NAMEFROMINFORMATION_SCHEMA.VIEWSWHERETABLE_NAME=G_T_VIEW)DROPVIEWG_T_VIEWGOCREATE VIEW G_T_VIEW(tno,tname,tsex,tdepa,tmajor,trank,tdegree)ASSELECT tno,tname,tsex,tdepa,tmajor,trank,tdegreeFROMteacerGO【例例9-149-14】教师及授课信息视图(视图教师及授课信息视图(视图3 3)同同样样的的道道理理,为为用用户户创创建建教教师师及及授授课课信信息息查查询询视视图图包括教师主讲课程以及开课学期等。包括教师主讲课程以及开课学期等。USE教学管理教学管理CREATE VIEW G_TC_VIEW(tno,tname,tsex,tdepa,tmajor,trank,tdegree,cname,odate,oterm,otime,otamou,olaca)ASSELECT T.tno,tname,tsex,tdepa,tmajor,trank,tdegree,cname,odate,oterm,otime,otamou,olacaFROMteacerT,offeringO,courseCWHERET.tno=O.tnoANDO.cno=C.cnoGO【例例9-159-15】根根据据教教学学管管理理部部门门对对学学生生选选课课管管理理的的需需要要,建建立立关于学生选课信息的视图(视图关于学生选课信息的视图(视图4 4)USE教学管理教学管理CREATE VIEW G_SC_VIEW(sno,sname,scometime,sdepa,smajor,sgpa,cno,cname,grade,odate,oterm,otime,otamou,olaca)ASSELECT S.sno,sname,scometime,sdepa,smajor,sgpa,C.cno,cname,grade,odate,oterm,otime,otamou,olacaFROMstudentT,enrollmentE,offeringO,courseCWHERES.sno=E.snoANDE.ono=O.onoANDO.cno=C.cnoGO【例例9-169-16】在在G_SC_viewG_SC_view视视图图的的基基础础上上,创创建建学学生生综综合合成成绩绩视图(视图视图(视图5 5)USE教学管理教学管理CREATEVIEWS_SCORE_VIEW(sno,sname,MIN_SCORE,MAX_SCORE,AVG_SCRORE)ASSELECT sno,sname,MIN(grade),MAX(grade),AVG(grade)FROMG_SC_VIEWGROUP BY sno,sname,scometime,sdepa,smajor,sgpaGOp经常不断地学习,你就什么都知道。你知道得越多,你就越有力量pStudyConstantly,AndYouWillKnowEverything.TheMoreYouKnow,TheMorePowerfulYouWillBe写在最后Thank You在别人的演说中思考,在自己的故事里成长Thinking In Other PeopleS Speeches,Growing Up In Your Own Story讲师:XXXXXX XX年XX月XX日
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!