您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > 第7章视图索引游标事务
网络数据库技术(第2版)第7章视图、索引、游标及事务逯燕玲戴红李志明主编2020年2月9日星期日2第7章视图、索引、游标及事务7.1视图7.2索引7.3游标7.4事务的使用2020年2月9日星期日37.1视图7.1.1视图概述视图是从一个表、多个表或视图中导出的表,其结构和数据是建立在对表的查询基础上的。视图不是真实存在的基础表,而是一个虚拟表,视图所对应的数据并不实际地以视图结构存储在数据库中,而是存储在视图所引用的表中。2020年2月9日星期日47.1.2创建视图的方法1.使用企业管理器向导创建视图【例7-1】在学籍管理数据库(students)中创建一个仅包含基础课的视图。启动SQLServer企业管理器,在企业管理器窗口中展开MicrosoftSQLServers和SQLServer组,选择SQLServer服务器。在“工具”菜单中选择“向导”菜单项,选择工具菜单中的“创建视图向导”,在出现的“创建视图向导”界面中单击“下一步”。2020年2月9日星期日5输入数据库名“学生学籍数据库”,单击“下一步”;输入所选数据库的选择对象对话框名“课程基本信息表”,单击“下一步”。为对象中的列选择视图所显示的字段,单击“下一步”。用“where课程类型=‘基础’”语句来定义所限制对话框,单击“下一步”。将对话框命名为“课程基本信息表_VIEW”,单击“下一步”。再选择“完成”,即可成功创建视图。2020年2月9日星期日67.1.2创建视图的方法2.用T-SQL创建视图语法:CREATEVIEW[database_name][owner]view_name[(column[,…n])][WITHview_attribute[,…n]]ASsellect_statement2020年2月9日星期日7【例7-2】在学籍管理数据库(students)中创建一个视图,其中内容为一门课程的成绩单,包含学生姓名。在”工具”菜单中选择”向导”命令CREATEVIEWSCCourseG[WITHview_attribute[,…n]]ASsellectSC.CNoFROMSC,CoursesWHERESC.CNo=Courses.CNoANDCourses.Cname=‘网络数据库’);2020年2月9日星期日8【例7-3】假设在学籍管理数据库(students)中有三个结构相同的学生基本信息表:S1、S2、S3,分别存放“计算机科学与技术”、“电子信息科学与技术”和“电子信息工程”专业的学生基本信息。创建一个视图将这三个表合并在一起。USEstudentsCREATEVIEWALL_StudentsASSELECT*FROMS1UNIONSELECT*FROMS2UNIONSELECT*FROMS32020年2月9日星期日97.1.3视图信息的查看和修改1.使用企业管理器查看和修改视图启动SQLServer企业管理器,登录到指定的服务器。打开要创建视图的数据库文件夹,选中view图标,此时在右面的窗格中显示当前数据库的所有视图。右键单击要查看的视图,在弹出的快捷菜单中选择“属性”,打开ViewProperties对话框。在该对话框内可浏览到该视图的正文,也可对该视图进行修改,然后单击“CheckSyntax”按钮对语句合法性进行检查,若对视图的访问权限进行设置,单击“Permissions”按钮。2020年2月9日星期日102.使用T-SQL查看和修改视图【例7-4】查看在学籍管理数据库(students)中创建的视图DB_S_Grades。SELECTFROMDB_S_Grades2020年2月9日星期日11当需要在视图中对数据进行插入、修改和删除等更新操作时,可与操作表数据窗口相似,同样可以对数据进行插入、修改和删除等更新操作。还可以使用INSERT、UPDATE和DELETE语句对视图数据进行更新。7.1.4视图数据的更新2020年2月9日星期日12在企业管理器窗口中单击“视图”选项,打开“视图列表”。在视图列表中找到要删除的视图,右键单击该视图打开其快捷菜单,选择“删除”。在出现的“除去对象”对话框中,选择“全部除去”即可完成。还可以使用T-SQL删除视图,基本语法格式为:DROPVIEW{view_name}[,…n]7.1.5删除视图2020年2月9日星期日137.2索引7.2.1索引的分类聚簇索引(ClusteredIndex):行的物理存储顺序与索引顺序完全相同,所以每个表只能有一个聚簇索引,且在表的主键列上自动创建聚簇索引。非聚簇索引:逻辑顺序不等于物理顺序,仅仅记录指针,通过这些指针可以在表中快速准确的定位数据。唯一性索引(UniqueIndex):能够保证在创建索引的列或多列的组合上不包括重复的数据,聚簇或非聚簇索引都可以是唯一性索引。2020年2月9日星期日14创建索引前考虑的问题只有表的拥有者才能在表上创建索引每一个表上只能创建一个聚簇索引每一个表上最多能创建249个非聚簇索引一个索引最多包含16个列,最大为900字节2020年2月9日星期日157.2.2创建索引1.使用企业管理器直接创建用鼠标右键单击要创建索引的表,选择”管理索引”菜单项。2.使用向导创建索引在”工具”菜单中选择”向导”命令3.使用T-SQL创建索引CREATE[UNIQUE][CLUSTERED][NONCLUSTERED]INDEXindex_nameON{table|view}(column[ASC]DESC][,…n])[WITH参数]2020年2月9日星期日167.2.3创建索引视图在视图上创建唯一聚集索引可以提高性能,执行该视图结果集在数据库中的存储方式与带聚集索引的表的存储方式相同。在视图上创建索引的另一个好处是:查询优化器开始在查询中使用视图索引,而不是直接在子句中命名视图。这样可从索引视图检索数据而无需重新编码,由此带来的高效率也使现有查询获益。2020年2月9日星期日177.2.4删除索引1.使用企业管理器直接删除索引在要删除索引的表上单击右键,选择”所有任务”中的”管理索引”命令。2.用T-SQL删除索引语法:DROPINDEXtable.index|view.index[,…n]例如:DROPINDEXStudent.DEPT2020年2月9日星期日18用企业管理器查看修改索引选择要查看的数据库表上单击右键,从快捷菜单中选择”所有任务中的“管理索引”项,出现“索引管理”对话框。选择要查看或修改的索引,单击“编辑”按钮,出现“修改索引”对话框。可修改索引的大部分设置,还可单击“编辑SQL…”按钮,在显示的SQL脚本编辑框直接修改其SQL脚本,但不能修改索引名,程序方式的索引名修改需要使用系统存储过程Sp_rename。要在企业管理器中修改索引名、改变其所属文件组等其它信息则需要在表的属性对话框中进行,该属性对话框是从”设计表结构“对话框中调用,而不是直接通过快捷菜单的“属性”菜单项调用。7.2.5查看与修改索引2020年2月9日星期日197.3游标游标是系统为用户在内存中开辟的一个数据缓冲区,用于存放SQL语句的查询结果,每个游标都有一个名字,通过宿主语言的循环使SQL逐一从游标中读取记录,赋给主变量,然后由宿主语言作进一步的处理。游标的操作一般分为如下几个步骤:定义游标EXECSQLDECLARE游标名CURSORFORSELECT语句打开游标EXECSQLOPEN游标名推进游标EXECSQLFETCH游标名INTO主变量名表关闭游标EXECSQLCLOSE游标名删除游标DEALLOCATE游标名2020年2月9日星期日20【例7-5】查询各种职称的教师的名单。EXECSQLBEGINDECLARESECTION;charxm[8];charzc[6];EXECSQLENDDECLARESECTION;printf(”Enter职称:”);scanf(“%s”,zc);EXECSQLDECLAREzc_curCURSORFORSELECTTname,TtitleFROMTEACHERWHERETtitle=:zc;EXECSQLOPENzc_curWhile(1){EXECSQLFETCHzc_curINTO:xm,:zc;if(sqlca.sqlcode0)break;……}EXECSQLCLOSEzc_cur;……2020年2月9日星期日217.4事务的使用7.4.1事务概述所谓事务,实际上就是对于一个不可分割的操作序列,控制它要么全部执行,要么都不执行。在每个事务结束时,数据库中的数据应该是一致的。设计事务程序时应保证事务具有如下特性:原子性(Atomicity)一致性(Consistency)独立性(Isolation)持久性(Durability)2020年2月9日星期日22三种执行事务的模式显式事务:每个事务均以BEGINTRANSACTION语句显式开始,而以COMMITTRAN或ROLLBACKTRAN等语句显式结束。隐性事务:在T-SQL脚本中,执行“SETIMPLICIT_TRANSACTIONSON”语句后,系统即进入隐性事务模式。自动提交事务:如果一个T-SQL语句成功地完成,则自动提交该语句;如果遇到错误,则自动回滚该语句。2020年2月9日星期日23开始事务语句BEGINTRAN[SACTION][TRANSACTION_NAME[WITHMARK['description']]]提交事务语句COMMIT[TRAN[SACTION][TRANSACTION_NAME]]回滚事务语句ROLLBACKTRAN[SACTION][transaction_name|savepoint_name]]保存事务断点语句SAVETRAN[SACTION]SAVEPOINT_NAME7.4.2事务处理语句2020年2月9日星期日24【例7-6】给教工“高山”增加工资100元。BEGINTRANSACTIONUPDATE教工登记表SET基本工资=基本工资+100WHERE姓名='高山’UPDATE教工工资表SET基本工资=基本工资+100WHERE姓名='高山'COMMIT2020年2月9日星期日25【例7-7】在“中高级职称名册”中修改一条记录,并插入一条记录。BEGINTRANSACTIONUPDATE中高级职称名册SET职称='副教授'WHERE姓名='王冠'INSERT中高级职称名册VALUES('SYS010','高山','男',45,1,'教授',4800,'计算机系')SELECT*FROM中高级职称名册COMMIT2020年2月9日星期日26【例7-8】将当前连接设成隐性事务状态,并进行还书。假如在还书时必须完成修改“租借信息”表和“图书信息”表两个操作,可编写如下脚本。DECLARE@借书证号varchar(5),@图书编号varchar(6)SET@借书证号='00006'SET@图书编号='100006'SETIMPLICIT_TRANSACTIONSONUPDATE租借信息SET还书日期=getdate()WHERE图书编号=@图书编号AND借书证号=@借书证号IF@@ERROR!=0AND@@ROWCOUNT=0BEGINROLLBACKTRANRETURNENDUPDATE图书信息SET状态=0WHERE图书编号=@图书编号IF@@ERROR!=0AND@@ROWCOUNT=0BEGINROLLBACKTRANRETURNENDCOMMITPRINT'恭喜你还书成功!'SETIMPLICIT_TRANSACTIONSOFF2020年2月9日星期日27【例7-9】某一新生来借书,假如要完成办借书证和借书两个操作。办借书证操作可理解为向“学生信息”表中插入一条办证记录;借书操作为了说明方便简化为只向“租借信息
本文标题:第7章视图索引游标事务
链接地址:https://www.777doc.com/doc-3601123 .html