页数:26页文件大小:461.8 KB来源: SQLServer2005数据库技术及应用ppt课件
本章把视图看作虚拟表或存储查询,先说明其集中、简化、定制数据与安全保护等特点,再演示用SSMS和CREATE VIEW语句创建单基表与多基表视图、加密定义与重命名,随后介绍修改、删除与浏览视图信息的方法,最后分析通过视图插入、更新和删除数据时受到的限制与典型失败案例。
第10章视图
第10章视图
第10章视图
视图可以被看成是虚拟表或存储查询,视图是SELECT语句的结果集构成的虚拟表。 可通过视图访问的数据不作为独特的对象存储在数据库内,数据库内存储的是SELECT语句。用户可以用引用表时所使用的方法,在T-SQL语句中通过引用视图名称来使用虚拟表。 SELECT语句引用的数据表称为视图的基表。10.1视图的特点
10.1视图的特点
分割数据,简化视点使用视图可以对表中的数据进行横向或纵向分割。纵向分割通过SELECT语句实现,通过使用WHERE子句实现横向分割。这样就可以使用户把注意力集中到所关心的数据列或数据行上。10.1视图的特点
10.2视图的创建创建视图主要有3种方法:
使用SQL Server Management Studio创建视图1.建立引用单个基表的视图(参见教材P)
使用SQL Server Management Studio创建视图1.建立引用多个基表的视图(参见教材P)【例10.1】在JWJL数据库中建立一个引用Teacher、Teaching、Course三个表的视图,名为“教师任课”。创建步骤如下:
用T-SQL命令创建视图
格式:CREATE VIEW view_name [(select_list,…)]AsSELECT select_list语句中各项参数的含义如下:view_name:定义视图的名字。视图的名字必须遵守标识符命名规则。可以在定义视图名的时候定义视图的拥有者。select_list :定义视图中列的名字。列名并不是必须定义的,默认情况下,视图列名会沿用表的列名。但是,当遇到以下情况时,必须为视图提供列名:–该列是从表中的计算列或者从一个常量继承下来;–当视图从多个表产生,而这些表中有数据列重名;–当视图中有一个数据列使用了同表中相应列名不同的时候,所有列名都必须给出。SELECT select_list:建立视图使用的SELECT语句。在使用这些SELECT语句时,必须拥有针对这些数据库对象进行查询的权力。在建立视图时可以使用任意复杂的SELECT子查询。用T-SQL命令创建视图【例10.2】在JWGL数据库里建立一个名为Teacher_view的视图。实现程序如下:USE JWGLGOCREATE VIEW Teacher_viewAsSELECT teacher_id,name,sex,professionFROM Teacher 在一个批处理中,CREATE VIEW语句必须写在最前面,所以在这个语句里使用了关键字GO来将这组语句分割为两个批处理。一个批处理以GO为其结束标志。对创建视图的脚本程序进行加密创建一个简单的视图:USE JWGLGOCREATE VIEW CLASS_VIEWWITH ENCRYPTIONASSELECT *FROM CLASSGO如果一个普通用户想用Sp_helptext来查看以上建立视图的代码,得到的结果将是:对象'CLASS_VIEW'的文本已加密。利用SP_Rename重命名SP_Rename用于重命名当前数据库中用户自定义的对象,如视图、表、存储过程、触发器、索引等。请注意,系统数据类型和系统对象是不允许重命名的。 例如,将Teacher_view改名为“教师视图”的查询语句为:SP_Rename’Teacher_view’,’教师视图’10.3修改视图的定义
10.3修改视图的定义
利用T-SQL命令修改视图的定义ALTER VIEW view_name[(column [,…])][WITH ENCRYPTION]AsSelect_statementALTER VIEW语句的功能是更改一个先前创建的视图。其参数意义与CREATE VIEW中的一样。例如将上面的VIEW1视图中筛选条件改为:sex=‘男’。使用以下语句:ALTER VIEW VIEW1ASSELECT *FROM StudentWHERE sex=‘男’10.4删除视图对不再需要的视图,可以删除。删除视图后,表和视图所基于的数据并不受到影响。1.使用SQL Server Management Studio在SQL Server Management Studio中可以很方便地删除视图,步骤如下:
10.4删除视图2利用T-SQL命令DROP VIEW语句的功能是删除一个或多个视图,语法如下:DROP VIEW{view}[,…n]View:要删除的视图。例如要删除视图V1,可以使用以下命令:DROP VIEW V1与删除表不同的是,删除视图后,只是删除了视图的定义,原来通过视图获得的所有数据依然存在,并没有被删除。10.5浏览视图信息1使用SQL Server Management Studio浏览视图信息在SQL Server Management Studio中可以很方便地浏览视图信息,步骤如下:
10.5浏览视图信息2利用T-SQL命令浏览视图信息视图建好后,可以使用SQL Server自带的系统存储过程来浏览视图的信息。使用系统存储过程sp_help(不带任何参数),可以浏览所有当前数据库里的对象,其中也包括视图。使用sp_help加上视图名,可以浏览视图中各列的列表和视图的相关信息10.6在视图上使用INSERT、UPDATE和DELETE语句1用INSERT语句向视图插入数据通过视图插入数据,实际上就是向创建该视图时所引用的表中,间接地插入数据。与直接在表中插入数据一样,视图通过INSERT语句来实现插入操作。但是通过视图插入数据,引用的是在视图上定义的列,而不是基表的列。
10.6在视图上使用INSERT、UPDATE和DELETE语句在进行数据插入时与直接在表中插入数据相比,会受到更多的限制:
使用了WITH CHECK OPTION的视图,进行插入操作,所插入的内容须符合SELECT语句中设置的WHERE条件。10.6在视图上使用INSERT、UPDATE和DELETE语句【例10.3】向Teacher_view插入1行数据。在新建查询窗口输入如下语句:INSERT INTO Teacher_view(name,sex,profession)VALUES(’赵磊’,’男’,’教授’)本例插入失败,原因是Teacher_view的引用表中,Teacher_id列定义为非空,在向视图插入数据时,未能插入Teacher_id列的数据。10.6在视图上使用INSERT、UPDATE和DELETE语句现修改视图Teacher_view的定义,使其增加Teacher_id列,修改查询程序如下:INSERT INTO Teacher_view(Teacher_id,name,sex,profession)VALUES(‘T16’‘赵磊’,’男’,’教授’)机器能顺利执行上述程序,当打开Teacher表时,会发现增加了1行有关赵磊的记录10.6在视图上使用INSERT、UPDATE和DELETE语句2用UPDATE语句更新视图用UPDATE语句更新视图与更新表中数据的方式相似,但由于视图使用了多个底层基表连接的情况下,每次更新操作只能更新来自某一个基表中的数据列的值,适用于INSERT操作的许多限制也适用于UPDATE操作。在前面建立了一个“教师任课”的视图,现在,要更新这个视图中的信息,把教师姓名(name)“张天清”改为“张青天”,课程名称(course_name)“数据库”改为“高等数学”。初学者很可能使用下面的语句:UPDATE教师任课SET name=“张青天”,course_name=“高等数学”WHERE name=“张天清”执行上述程序,系统返回如下出错信息:服务器:消息4405,级别16,状态2,行1视图或函数'教师任课'不可更新,因为修改会影响多个基表。10.6在视图上使用INSERT、UPDATE和DELETE语句问题出在用户想在一个UPDATE语句中同时更新来自两个基表中的数据列。只要把这个更新操作分解为两个更新操作,语句就可以执行成功。语句如下:UPDATE教师任课SET name=“张青天”,WHERE name=“张天清”GOUPDATE教师任课course_name=“高等数学”WHERE course_name =“数据库”GO10.6在视图上使用INSERT、UPDATE和DELETE语句3用DELETE语句删除视图中的数据
以下是视图删除操作的一个例子:DELETE Result_viewWHERE Student_id=’2005010’本例删除学号为“2005010”同学的所有成绩。下载地址:{{downurl}}
{{{a}}}
{{#b}}{{{b}}}
{{/b}} {{/title}} {{#nolog}}登陆注册
{{/nolog}} {{#djsx}}点我刷新
{{/djsx}} {{#gocz}} {{/gocz}} {{#ffqr}} {{/ffqr}}