首页计算机计算机软件SQLServer2005数据库技术及应用 10 第10章 视图.pptx

10 第10章 视图.pptx

页数:26页文件大小:461.8 KB来源: SQLServer2005数据库技术及应用ppt课件

本章把视图看作虚拟表或存储查询,先说明其集中、简化、定制数据与安全保护等特点,再演示用SSMS和CREATE VIEW语句创建单基表与多基表视图、加密定义与重命名,随后介绍修改、删除与浏览视图信息的方法,最后分析通过视图插入、更新和删除数据时受到的限制与典型失败案例。

第10章视图章封面,标示本章主题为视图的创建、修改与维护
第10章视图目录页,列出视图特点、创建、修改、删除与在视图上增删改数据等六节
第10章视图(续)的T-SQL示例代码,可通过视图访问的数据不作为独特的对象存储在数据库内,数据库内存储的是SELECT语句。用户可以用引用表时所使用的方法
查看本课件的文字版(共 26 页,供检索与复制)

第1页:第10章视图

第10章视图

第2页:第10章目录:视图

第10章视图

  • 10.1视图的特点
  • 10.2视图的创建
  • 10.3修改视图的定义
  • 10.4删除视图
  • 10.5浏览视图信息
  • 10.6在视图上使用INSERT、UPDATE和DELETE语句

第3页:第10章视图(续)

第10章视图

视图可以被看成是虚拟表或存储查询,视图是SELECT语句的结果集构成的虚拟表。 可通过视图访问的数据不作为独特的对象存储在数据库内,数据库内存储的是SELECT语句。用户可以用引用表时所使用的方法,在T-SQL语句中通过引用视图名称来使用虚拟表。 SELECT语句引用的数据表称为视图的基表。
  • 视图可以使用WHERE子句限制返回行的数据查询的结果。所以视图可以是专用的,比表更面向用户。

第4页:10.1视图的特点

10.1视图的特点

  • 视图是从一个或多个相关联表或视图中派生出来的,常用于集中、简化和定制显示数据库中的数据信息。
  • 它限制了用户所能看到和修改的数据。
  • 视图象个过滤器,对一个或多个相关联表中的数据进行筛选和引用。

第5页:视图的特点(续)

10.1视图的特点

分割数据,简化视点使用视图可以对表中的数据进行横向或纵向分割。纵向分割通过SELECT语句实现,通过使用WHERE子句实现横向分割。这样就可以使用户把注意力集中到所关心的数据列或数据行上。
  • 简化操作通过定义视图可以大大简化对表的存取操作。而对那些只需要向多个表进行简单查询的用户,视图是一个极好的查询操作窗口。
  • 提供自动的安全保护功能在限制表用户使用权限的基础上,可以进一步限制视图的用户。而且,可以针对不同的用户制定不同的视图,从而在用户视图上不包括机密数据字段,可以自动屏蔽机密数据。

第6页:视图的特点(续3)

10.1视图的特点

  • 为数据库重构提供一定的逻辑独立性
  • 如果只是通过视图来存取数据库中的数据,数据库管理员可以有选择地改变构成视图的基表,而不用考虑那些通过视图引用数据的应用程序的改动。
  • 在关系数据库里,数据库的重新构造是不可避免的。数据库重构最常见的情况,是把一个表垂直地分割成两个表。在这种情况下,可以通过修改视图的定义,使视图适应这种变化。但由于应用程序从视图中提取数据的方式和数据类型不变,所以就避免了应用程序的频繁改动。

第7页:10.2视图的创建

10.2视图的创建创建视图主要有3种方法:

  • 使用创建视图向导
  • 使用SQL Server Management Studio
  • 使用T-SQL命令

第8页:用SSMS创建视图

使用SQL Server Management Studio创建视图1.建立引用单个基表的视图(参见教材P)

  • 在SQL Server Management Studio中,展开指定要使用的数据库,选中“视图”目录。
  • 右击鼠标,选择“新建视图”命令,打开“视图设计器”窗口,它包括关系图窗格、网格窗格、SQL窗格和结果窗格4部分。同时打开“添加表对话框”。
  • 选择“Student”表,单击“添加”按钮,关闭“添加表”对话框。
  • 在关系图网格中,选择相应表中的列。
  • 在网格窗格中,在“sex”行对应的“筛选器”栏中添加“女”。
  • 单击工具栏中的“运行”按钮,结果出现在“结果窗格”中(图10.1)
  • 关闭“视图设计器”窗口,在“输入视图名称”对话框中输入“view1”。
  • view1视图出现在SQL Server Management Studio中。

第9页:【例10.1】在JWJL数据库中建立一个

使用SQL Server Management Studio创建视图1.建立引用多个基表的视图(参见教材P)【例10.1】在JWJL数据库中建立一个引用Teacher、Teaching、Course三个表的视图,名为“教师任课”。创建步骤如下:

  • 在SQL Server Management Studio中,展开JWGL数据库,选中“视图”目录。
  • 右击鼠标,选择“新建视图”命令,打开“视图设计器”窗口,它包括关系图窗格、网格窗格、SQL窗格和结果窗格4部分。打开“添加表”对话框。
  • 添加Teacher、Teaching、Course三个表。
  • 关系图网格中,使Teaching在三个表中居中排列,拖拽Teacher表的Teacher_id到Teaching表,拖拽Course表的Course_id到Teaching表。
  • 在关系图网格中,选择相应表中的列。
  • 在网格窗格中,在表为“course”行对应的“name”列的“别名”由“expr1”改为“课程名”。
  • 单击工具栏中的“运行”按钮,结果出现在“结果窗格”中(图10.2)
  • 关闭“视图设计器”,在“输入视图名称”对话框中输入“教师任课”。
  • “教师任课”视图出现在SQL Server Management Studio中。

第10页:用T-SQL命令创建视图

用T-SQL命令创建视图

格式:CREATE VIEW view_name [(select_list,…)]AsSELECT select_list语句中各项参数的含义如下:view_name:定义视图的名字。视图的名字必须遵守标识符命名规则。可以在定义视图名的时候定义视图的拥有者。select_list :定义视图中列的名字。列名并不是必须定义的,默认情况下,视图列名会沿用表的列名。但是,当遇到以下情况时,必须为视图提供列名:–该列是从表中的计算列或者从一个常量继承下来;–当视图从多个表产生,而这些表中有数据列重名;–当视图中有一个数据列使用了同表中相应列名不同的时候,所有列名都必须给出。SELECT select_list:建立视图使用的SELECT语句。在使用这些SELECT语句时,必须拥有针对这些数据库对象进行查询的权力。在建立视图时可以使用任意复杂的SELECT子查询。

第11页:【例10.2】在JWGL数据库里建立一个

用T-SQL命令创建视图【例10.2】在JWGL数据库里建立一个名为Teacher_view的视图。实现程序如下:USE JWGLGOCREATE VIEW Teacher_viewAsSELECT teacher_id,name,sex,professionFROM Teacher 在一个批处理中,CREATE VIEW语句必须写在最前面,所以在这个语句里使用了关键字GO来将这组语句分割为两个批处理。一个批处理以GO为其结束标志。

第12页:加密视图创建脚本

对创建视图的脚本程序进行加密创建一个简单的视图:USE JWGLGOCREATE VIEW CLASS_VIEWWITH ENCRYPTIONASSELECT *FROM CLASSGO如果一个普通用户想用Sp_helptext来查看以上建立视图的代码,得到的结果将是:对象'CLASS_VIEW'的文本已加密。

第13页:利用SP_Rename重命名视图

利用SP_Rename重命名SP_Rename用于重命名当前数据库中用户自定义的对象,如视图、表、存储过程、触发器、索引等。请注意,系统数据类型和系统对象是不允许重命名的。 例如,将Teacher_view改名为“教师视图”的查询语句为:SP_Rename’Teacher_view’,’教师视图’

第14页:10.3修改视图的定义

10.3修改视图的定义

  • 使用SQLServerManagementStudio对于已经存在的视图,可以修改视图的定义和属性,而不需要先删除该视图再重建同名的视图。方法如下:(1)展开视图所在的数据库节点,然后从数据库上展开视图节点。(2)从视图列表中选中要修改的视图。(3)从右键弹出的快捷菜单中选择“修改”命令,重新进入创建视图的图形界面,然后进行修改,重新编辑视图的定义。

第15页:修改视图的定义(续)

10.3修改视图的定义

利用T-SQL命令修改视图的定义ALTER VIEW view_name[(column [,…])][WITH ENCRYPTION]AsSelect_statementALTER VIEW语句的功能是更改一个先前创建的视图。其参数意义与CREATE VIEW中的一样。例如将上面的VIEW1视图中筛选条件改为:sex=‘男’。使用以下语句:ALTER VIEW VIEW1ASSELECT *FROM StudentWHERE sex=‘男’

第16页:10.4删除视图

10.4删除视图对不再需要的视图,可以删除。删除视图后,表和视图所基于的数据并不受到影响。1.使用SQL Server Management Studio在SQL Server Management Studio中可以很方便地删除视图,步骤如下:

  • 展开服务器,然后展开“数据库”文件夹。
  • 找到要删除的视图,右击并选择“删除”命令。
  • 打开“除去对象”对话框,单击“全部除去”按钮,将视图删除。

第17页:删除视图(续)

10.4删除视图2利用T-SQL命令DROP VIEW语句的功能是删除一个或多个视图,语法如下:DROP VIEW{view}[,…n]View:要删除的视图。例如要删除视图V1,可以使用以下命令:DROP VIEW V1与删除表不同的是,删除视图后,只是删除了视图的定义,原来通过视图获得的所有数据依然存在,并没有被删除。

第18页:10.5浏览视图信息

10.5浏览视图信息1使用SQL Server Management Studio浏览视图信息在SQL Server Management Studio中可以很方便地浏览视图信息,步骤如下:

  • 展开服务器,然后展开“数据库”文件夹。
  • 找到要浏览的视图,右击并选择“属性”命令,弹出对话框,可知该视图的属性。

第19页:浏览视图信息(续)

10.5浏览视图信息2利用T-SQL命令浏览视图信息视图建好后,可以使用SQL Server自带的系统存储过程来浏览视图的信息。使用系统存储过程sp_help(不带任何参数),可以浏览所有当前数据库里的对象,其中也包括视图。使用sp_help加上视图名,可以浏览视图中各列的列表和视图的相关信息

第20页:在视图上使用INSERT语句

10.6在视图上使用INSERT、UPDATE和DELETE语句1用INSERT语句向视图插入数据通过视图插入数据,实际上就是向创建该视图时所引用的表中,间接地插入数据。与直接在表中插入数据一样,视图通过INSERT语句来实现插入操作。但是通过视图插入数据,引用的是在视图上定义的列,而不是基表的列。

第21页:10.6在视图上使用INSERT、UPD

10.6在视图上使用INSERT、UPDATE和DELETE语句在进行数据插入时与直接在表中插入数据相比,会受到更多的限制:

  • 使用INSERT语句的用户必须拥有在基表中插入数据的权力。
  • 因为某些规则或约束的限制而不能接受从视图插入的列。
  • 在视图中若包含了使用统计函数的结果,或是包含了多个列值的组合,则不能进行插入操作。
  • 在使用了DISTINCT语句的视图中不能进行插入操作。
  • 使用了GROUP BY语句的视图中不能进行插入操作。
使用了WITH CHECK OPTION的视图,进行插入操作,所插入的内容须符合SELECT语句中设置的WHERE条件。
  • 对多表链接而成的视图来说,一个INSERT语句一次只能对单独某个表中的列进行插值操作。

第22页:【例10.3】向Teacher_view

10.6在视图上使用INSERT、UPDATE和DELETE语句【例10.3】向Teacher_view插入1行数据。在新建查询窗口输入如下语句:INSERT INTO Teacher_view(name,sex,profession)VALUES(’赵磊’,’男’,’教授’)本例插入失败,原因是Teacher_view的引用表中,Teacher_id列定义为非空,在向视图插入数据时,未能插入Teacher_id列的数据。

第23页:在视图上使用INSERT、UPD(续)

10.6在视图上使用INSERT、UPDATE和DELETE语句现修改视图Teacher_view的定义,使其增加Teacher_id列,修改查询程序如下:INSERT INTO Teacher_view(Teacher_id,name,sex,profession)VALUES(‘T16’‘赵磊’,’男’,’教授’)机器能顺利执行上述程序,当打开Teacher表时,会发现增加了1行有关赵磊的记录

第24页:在视图上使用INSERT、UPD(续3)

10.6在视图上使用INSERT、UPDATE和DELETE语句2用UPDATE语句更新视图用UPDATE语句更新视图与更新表中数据的方式相似,但由于视图使用了多个底层基表连接的情况下,每次更新操作只能更新来自某一个基表中的数据列的值,适用于INSERT操作的许多限制也适用于UPDATE操作。在前面建立了一个“教师任课”的视图,现在,要更新这个视图中的信息,把教师姓名(name)“张天清”改为“张青天”,课程名称(course_name)“数据库”改为“高等数学”。初学者很可能使用下面的语句:UPDATE教师任课SET name=“张青天”,course_name=“高等数学”WHERE name=“张天清”执行上述程序,系统返回如下出错信息:服务器:消息4405,级别16,状态2,行1视图或函数'教师任课'不可更新,因为修改会影响多个基表。

第25页:在视图上使用INSERT、UPD(续4)

10.6在视图上使用INSERT、UPDATE和DELETE语句问题出在用户想在一个UPDATE语句中同时更新来自两个基表中的数据列。只要把这个更新操作分解为两个更新操作,语句就可以执行成功。语句如下:UPDATE教师任课SET name=“张青天”,WHERE name=“张天清”GOUPDATE教师任课course_name=“高等数学”WHERE course_name =“数据库”GO

第26页:在视图上使用INSERT、UPD(续5)

10.6在视图上使用INSERT、UPDATE和DELETE语句3用DELETE语句删除视图中的数据

  • 删除视图数据的方法与在基表中删除数据的方法相似。事实上,通过视图删除数据最终都体现为从基表中删除数据。
  • 当一个视图引用两个以上基表数据时,不允许删除视图中的数据。
以下是视图删除操作的一个例子:DELETE Result_viewWHERE Student_id=’2005010’本例删除学号为“2005010”同学的所有成绩。
顶部目录