《SQLServer2005数据库技术及应用》课件第10章视图

上传人:考试不挂****2941... 文档编号:243004847 上传时间:2024-09-13 格式:PPT 页数:26 大小:412KB
返回 下载 相关 举报
《SQLServer2005数据库技术及应用》课件第10章视图_第1页
第1页 / 共26页
《SQLServer2005数据库技术及应用》课件第10章视图_第2页
第2页 / 共26页
《SQLServer2005数据库技术及应用》课件第10章视图_第3页
第3页 / 共26页
点击查看更多>>
资源描述
, , , , , ,*,SQL Server 2005,第,10,章 视图,第,10,章 视图,10.1,视图的特点,10.2,视图的创建,10.3,修改视图的定义,10.4,删除视图,10.5,浏览视图信息,10.6,在视图上使用,INSERT,、,UPDATE,和,DELETE,语句,第,10,章 视图,视图可以被看成是虚拟表或存储查询,视图是,SELECT,语句的结果集构成的虚拟表。,可通过视图访问的数据不作为独特的对象存储在数据库内,数据库内存储的是,SELECT,语句。用户可以用引用表时所使用的方法,在,T-SQL,语句中通过引用视图名称来使用虚拟表。,SELECT,语句引用的数据表称为视图的基表。,视图可以使用,WHERE,子句限制返回行的数据查询的结果。所以视图可以是专用的,比表更面向用户。,10.1,视图的特点,视图是从一个或多个相关联表或视图中派生出来的,常用于集中、简化和定制显示数据库中的数据信息。,它限制了用户所能看到和修改的数据。,视图象个过滤器,对一个或多个相关联表中的数据进行筛选和引用。,10.1,视图的特点,分割数据,简化视点,使用视图可以对表中的数据进行横向或纵向分割。纵向分割通过,SELECT,语句实现,通过使用,WHERE,子句实现横向分割。这样就可以使用户把注意力集中到所关心的数据列或数据行上。,简化操作,通过定义视图可以大大简化对表的存取操作。而对那些只需要向多个表进行简单查询的用户,视图是一个极好的查询操作窗口。,提供自动的安全保护功能,在限制表用户使用权限的基础上,可以进一步限制视图的用户。而且,可以针对不同的用户制定不同的视图,从而在用户视图上不包括机密数据字段,可以自动屏蔽机密数据。,10.1,视图的特点,为数据库重构提供一定的逻辑独立性,如果只是通过视图来存取数据库中的数据,数据库管理员可以有选择地改变构成视图的基表,而不用考虑那些通过视图引用数据的应用程序的改动。,在关系数据库里,数据库的重新构造是不可避免的。数据库重构最常见的情况,是把一个表垂直地分割成两个表。在这种情况下,可以通过修改视图的定义,使视图适应这种变化。但由于应用程序从视图中提取数据的方式和数据类型不变,所以就避免了应用程序的频繁改动。,10.2,视图的创建,创建视图主要有,3,种方法:,使用创建视图向导,使用,SQL Server Management Studio,使用,T-SQL,命令,使用,SQL Server Management Studio,创建视图,1,建立引用单个基表的视图(参见教材,P,),在,SQL Server Management Studio,中,展开指定要使用的数据库,选中“视图”目录。,右击鼠标,选择“新建视图”命令,打开“视图设计器”窗口,它包括关系图窗格、网格窗格、,SQL,窗格和结果窗格,4,部分。同时打开“添加表对话框”。,选择“,Student”,表,单击“添加”按钮,关闭“添加表”对话框。,在关系图网格中,选择相应表中的列。,在网格窗格中,在“,sex”,行对应的“筛选器”栏中添加“女”。,单击工具栏中的“运行”按钮,结果出现在“结果窗格”中(图,10.1,),关闭“视图设计器”窗口,在“输入视图名称”对话框中输入“,view1”,。,view1,视图出现在,SQL Server Management Studio,中。,使用,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,中。,用,T-SQL,命令,创建视图,格式,:,CREATE VIEW,view_name,(,select_list,),As,SELECT,select_list,语句中各项参数的含义如下,:,view_name,:,定义视图的名字。视图的名字必须遵守标识符命名规则。可以在定义视图名的时候定义视图的拥有者。,select_list,:,定义视图中列的名字。列名并不是必须定义的,默认情况下,视图列名会沿用表的列名。但是,当遇到以下情况时,必须为视图提供列名,:,该列是从表中的计算列或者从一个常量继承下来,;,当视图从多个表产生,而这些表中有数据列重名,;,当视图中有一个数据列使用了同表中相应列名不同的时候,所有列名 都必须给出。,SELECT,select_list,:,建立视图使用的,SELECT,语句。在使用这些,SELECT,语句时,必须拥有针对这些数据库对象进行查询的权力。在建立视图时可以使用任意复杂的,SELECT,子查询。,用,T-SQL,命令,创建视图,【例,10.2】,在,JWGL,数据库里建立一个名为,Teacher_view,的视图。实现程序如下:,USE JWGL,GO,CREATE VIEW,Teacher_view,As,SELECT,teacher_id,name,sex,profession,FROM Teacher,在一个批处理中,CREATE VIEW,语句必须写在最前面,所以在这个语句里使用了关键字,GO,来将这组语句分割为两个批处理。一个批处理以,GO,为其结束标志。,对创建视图的脚本程序进行加密,创建一个简单的视图,:,USE JWGL,GO,CREATE VIEW CLASS_VIEW,WITH ENCRYPTION,AS,SELECT *,FROM CLASS,GO,如果一个普通用户想用,Sp_helptext,来查看以上建立视图的代码,得到的结果将是,:,对象,CLASS_VIEW,的文本已加密。,利用,SP_Rename,重命名,SP_Rename,用于重命名当前数据库中用户自定义的对象,如视图、表、存储过程、触发器、索引等。请注意,系统数据类型和系统对象是不允许重命名的。,例如,将,Teacher_view,改名为“教师视图”的查询语句为:,SP_Rename,Teacher_view,教师视图,10.3,修改视图的定义,使用,SQL Server Management Studio,对于已经存在的视图,可以修改视图的定义和属性,而不需要先删除该视图再重建同名的视图。,方法如下,:,(1),展开视图所在的数据库节点,然后从数据库上展开视图节点。,(2),从视图列表中选中要修改的视图。,(3),从右键弹出的快捷菜单中选择“修改”命令,重新进入创建视图的图形界面,然后进行修改,重新编辑视图的定义。,10.3,修改视图的定义,利用,T-SQL,命令修改视图的定义,ALTER VIEW,view_name(column,),WITH ENCRYPTION,As,Select_statement,ALTER VIEW,语句的功能是更改一个先前创建的视图。其参数意义与,CREATE VIEW,中的一样。,例如将上面的,VIEW1,视图中筛选条件改为:,sex=,男。使用以下语句:,ALTER VIEW VIEW1,AS,SELECT *,FROM Student,WHERE sex=,男,10.4,删除视图,对不再需要的视图,可以删除。删除视图后,表和视图所基于的数据并不受到影响。,1.,使用,SQL Server Management Studio,在,SQL Server Management Studio,中可以很方便地删除视图,步骤如下:,展开服务器,然后展开“数据库”文件夹。,找到要删除的视图,右击并选择“删除”命令。,打开“除去对象”对话框,单击“全部除去”按钮,将视图删除。,10.4,删除视图,2,利用,T-SQL,命令,DROP VIEW,语句的功能是删除一个或多个视图,语法如下:,DROP,VIEWview,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,语句,在进行数据插入时与直接在表中插入数据相比,会受到更多的限制,:,使用,INSERT,语句的用户必须拥有在基表中插入数据的权力。,因为某些规则或约束的限制而不能接受从视图插入的列。,在视图中若包含了使用统计函数的结果,或是包含了多个列值的组合,则不能进行插入操作。,在使用了,DISTINCT,语句的视图中不能进行插入操作。,使用了,GROUP BY,语句的视图中不能进行插入操作。,使用了,WITH CHECK OPTION,的视图,进行插入操作,所插入的内容须符合,SELECT,语句中设置的,WHERE,条件。,对多表链接而成的视图来说,一个,INSERT,语句一次只能对单独某个表中的列进行插值操作。,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=“,张天清”,GO,UPDATE,教师任课,course_name,=“,高等数学”,WHERE,course_name,=“,数据库”,GO,10.6,在视图上使用,INSERT,、,UPDATE,和,DELETE,语句,3,用,DELETE,语句删除视图中的数据,删除视图数据的方法与在基表中删除数据的方法相似。事实上,通过视图删除数据最终都体现为从基表中删除数据。,当一个视图引用两个以上基表数据时,不允许删除视图中的数据。,以下是视图删除操作的一个例子:,DELETE,Result_view,WHERE,Student_id,=2005010,本例删除学号为“,2005010”,同学的所有成绩。,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


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

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


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