您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 第四章视图和游标2介绍
4.2.1视图概念使用视图时,要注意下列事项:(1)只有在当前数据库中才能创建视图。视图的命名必须遵循标识符命名规则,不能与表同名,且对每个用户视图名必须是唯一的,即对不同用户,即使是定义相同的视图,也必须使用不同的名字。(2)不能把规则、默认值或触发器与视图相关联。(3)不能在视图上建立任何索引,包括全文索引视图与表(有时为与视图区别,也称表为基本表——BaseTable)不同,视图是一个虚表,即视图所对应的数据不进行实际存储,数据库中只存储视图的定义,对视图的数据进行操作时,系统根据视图的定义去操作与视图相关联的基本表。视图是从一个或多个表(或视图)导出的表。视图是数据库的用户使用数据库的观点。4.2.2创建视图3.使用CREATEVIEW语句创建视图T-SQL中用于创建视图的语句是CREATEVIEW语句,例如用该语句创建视图CS_XS,其表示形式为:USEXSCJGOCREATEVIEWCS_XSASSELECT*FROMXSWHERE专业名='计算机'GO语法格式:CREATEVIEW[database_name.][owner.]view_name[(column_name[,…n])][WITHview_attribute[,…n]]ASselect_statement[WITHCHECKOPTION]4.2.2创建视图【例4.51】创建CS_KC视图,包括计算机专业各学生的学号、其选修的课程号及成绩。要保证对该视图的修改都要符合专业名为计算机这个条件。CREATEVIEWCS_KCWITHENCRYPTIONASSELECTXS.学号,课程号,成绩FROMXS,XS_KCWHEREXS.学号=XS_KC.学号AND专业名='计算机'WITHCHECKOPTION【例4.52】创建计算机专业学生的平均成绩视图CS_KC_AVG,包括学号(在视图中列名为num)和平均成绩(在视图中列名为score_avg)。CREATEVIEWCS_KC_AVG(num,score_avg)ASSELECT学号,AVG(成绩)FROMCS_KCGROUPBY学号4.2.3查询视图【例4.53】使用视图CS_KC查找计算机专业的学生学号和选修的课程号。SELECT学号,课程号FROMCS_KC【例4.54】查找平均成绩在80分以上的学生的学号和平均成绩。本例首先创建学生平均成绩视图XS_KC_AVG,包括学号(在视图中列名为num)和平均成绩(在视图中列名为score_avg)。CREATEVIEWXS_KC_AVG(num,score_avg)ASSELECT学号,AVG(成绩)FROMXS_KCGROUPBY学号再对XS_KC_AVG视图进行查询。SELECT*FROMXS_KC_AVGWHEREscore_avg=804.2.4更新视图1.可更新视图要通过视图更新基本表数据,必须保证视图是可更新视图。一个可更新视图可以是以下情形之一:(1)满足以下条件的视图:创建视图的SELECT语句中没有聚合函数,且没有TOP、GROUPBY、UNION子句及DISTINCT关键字;创建视图的SELECT语句中不包含从基本表列通过计算所得的列;创建视图的SELECT语句的FROM子句中至少要包含一个基本表。前面创建的视图CS_XS、CS_KC是可更新视图,而CS_KC_AVG是不可更新的视图。4.2.4更新视图2.插入数据【例4.56】向CS_XS视图中插入一条记录:(‘001115’,‘刘明仪’,‘计算机’,1,‘1978-3-2’,50,NULL)INSERTINTOCS_XSVALUES('001115','刘明仪','计算机',1,'1978-3-2',50,NULL,NULL)使用SELECT语句查询CS_XS依据的基本表XS:SELECT*FROMXS将会看到该表已添加了('001115','刘明仪','计算机',1,'1978-3-2',50,NULL,NULL)行。4.2.4更新视图3.修改数据【例4.58】将CS_XS视图中所有学生的总学分增加8。UPDATECS_XSSET总学分=总学分+8【例4.59】将CS_KC视图中学号为001101的学生的101课程成绩改为90。UPDATECS_KCSET成绩=90WHERE学号='081113'AND课程号='101'4.2.4更新视图4.删除数据【例4.61】删除CS_XS中女同学的记录。DELETEFROMCS_XSWHERE性别=04.2.5修改视图的定义2.使用ALTERVIEW语句修改视图语法格式:ALTERVIEW[database_name.][owner.]view_name[(column_name[,…n])][WITHview_attribute[,…n]]ASselect_statement[WITHCHECKOPTION]【例4.64】将CS_XS视图修改为只包含计算机专业学生的学号、姓名和总学分。USEXSCJGOALTERVIEWCS_XSASSELECT学号,姓名,总学分FROMXSWHERE专业名='计算机'GO4.2.5修改视图的定义【例4.65】视图CS_KC是加密存储视图,修改其定义:包括学号、姓名、选修的课程号、课程名和成绩。ALTERVIEWCS_KCWITHENCRYPTIONASSELECTXS.学号,XS.姓名,XS_KC.课程号,KC.课程名,成绩FROMXS,XS_KC,KCWHEREXS.学号=XS_KC.学号ANDXS_KC.课程号=KC.课程号AND专业名='计算机'WITHCHECKOPTION4.2.6删除视图在企业管理器中删除视图的操作方法是:展开数据库和视图,在需删除的视图上单击鼠标右键,在弹出的快捷菜单上选择“删除”,出现如图4.34所示的对话框,在其中点击“全部除去”按钮即可删除指定的视图。语法格式:DROPVIEW{view}[,…n]其中view是视图名,使用DROPVIEW一次可删除多个视图。例如:DROPVIEWCS_KC将删除视图CS_KC。•在T-SQL语句产生的结果中都是一个结果集,一般包含多行记录,T-SQL只能把结果集作为一个整体处理;而有时,特别是将T-SQL结果集嵌入到其他语言(如C,java等)编写的程序时,需要对结果集逐行处理。•游标就是T-SQL中提供的逐行处理结果集的一种机制,可以对结果集逐行处理。•一般的T-SQL语句的处理方式是一次一集合,游标的处理方式是一次一记录4.3游标4.3.2声明游标T-SQL中声明游标使用DECLARECURSOR语句,该语句有两种格式,分别支持SQL-92标准和T-SQL扩展的游标声明。1.SQL-92语法语句格式:DECLAREcursor_name[INSENSITIVE][SCROLL]CURSORFORselect_statement[FOR{READONLY|UPDATE[OFcolumn_name[,…n]]}]2.T-SQL扩展语句格式:DECLAREcursor_nameCURSOR[LOCAL|GLOBAL]/*游标作用域*/[FORWORD_ONLY|SCROLL]/*游标移动方向*/[STATIC|KEYSET|DYNAMIC|FAST_FORWARD]/*游标类型*/[READ_ONLY|SCROLL_LOCKS|OPTIMISTIC]/*访问属性*/[TYPE_WARNING]/*类型转换警告信息*/FORselect_statement/*SELECT查询语句*/[FORUPDATE[OFcolumn_name[,…n]]]/*可修改的列*/游标的使用•使用游标要分成五个步骤,其中最后一个步骤有时可以省略•声明游标•打开游标•读取数据•关闭游标•删除游标声明游标•DECLAREcursor_nameCURSOR[LOCAL|GLOBAL]--作用域•[FORWARD_ONLY|SCROLL]--移动方向•[STATIC|KEYSET|DYNAMIC|FAST_FORWARD]--类型[READ_ONLY|SCROLL_LOCKS|OPTIMISTIC]•--访问属性•[TYPE_WARNING]FORselect_statement[FORUPDATE[OFcolumn_name[,...n]]]声明游标•声明一个游标,查询学生表中的所有数据。可以对该游标进行修改和滚动访问Declarexs_curcursorScrolldynamicForselect*fromxs打开游标•Open游标名或游标变量打开上一步声明的游标xs_curOpenxs_curselect@@cursor_rows游标行数读取数据•FETCH[[NEXT|PRIOR|FIRST|LAST|ABSOLUTE{n|@nvar}|RELATIVE{n|@nvar}]FROM]{{[GLOBAL]cursor_name}|@cursor_variable_name}[INTO@variable_name[,...n]]读取数据•从xs_cur中读取数据Fetchnextfromxs_curWhile(@@fetch_status=0)Fetchnextfromxs_cur关闭游标•Close游标名或游标变量名关闭游标xs_curClosexs_cur删除游标•游标关闭后仍然存在,要使用时可以再打开,然后又可以再读取数据等•要彻底清除游标,释放系统资源,可以删除游标•Deallocate游标名或游标变量名删除游标xs_curDeallocatexs_cur人有了知识,就会具备各种分析能力,明辨是非的能力。所以我们要勤恳读书,广泛阅读,古人说“书中自有黄金屋。”通过阅读科技书籍,我们能丰富知识,培养逻辑思维能力;通过阅读文学作品,我们能提高文学鉴赏水平,培养文学情趣;通过阅读报刊,我们能增长见识,扩大自己的知识面。有许多书籍还能培养我们的道德情操,给我们巨大的精神力量,鼓舞我们前进。
本文标题:第四章视图和游标2介绍
链接地址:https://www.777doc.com/doc-4131305 .html