下载

0下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 《数据库系统原理》实验指导书参考答案(计本10、电商10)

《数据库系统原理》实验指导书参考答案(计本10、电商10).doc

《数据库系统原理》实验指导书参考答案(计本10、电商10)

Myra坤
2017-09-18 0人阅读 举报 0 0 0 暂无简介

简介:本文档为《《数据库系统原理》实验指导书参考答案(计本10、电商10)doc》,可适用于综合领域

《数据库系统原理》实验指导书参考答案(计本、电商)浙江树人大学信息科技学院《数据库系统原理》实验指导书适合专业:计算机科学与技术本科专业编写部门:电子商务教研室编写日期:实验一:SQLServer服务器管理实验二:创建和管理数据库实验三:数据定义实验四:数据更新实验五:数据查询简单查询实验六:数据查询()连接查询实验七:数据查询()综合实验八:视图实验九:约束、默认、规则实验十:存储过程实验十一:触发器()实验十二:触发器()实验十三:安全性管理实验十四:数据库的备份与还原实验一:SQLServer服务器管理一、实验目的通过实验使学生掌握SQLServer数据库服务器启动、暂停、停止的方法掌握SQLServer数据库服务器的注册方法。二、原理解析、SQLServer服务器注册注册服务器就是在SQLServerManagementStudio中登记服务器然后把它加入到一个指定的服务器组中并在SQLServerManagementStudio中显示SQLServer服务器的运行状态和在SQLServerManagementStudio连接时自动启动SQLServer服务器。、SQLServer的各种实用工具,SQLServerManagementStudioSQLServer提供了多种实用工具来帮助用户管理和使用数据库这些工具大大方便了用户的工作。SQLServerManagementStudio是微软管理控制台中的一个内建控制台用来管理所有的SQLServer数据库。,SQLServerManagementStudio查询窗口SQLServerManagementStudio查询窗口是一个图形界面的查询工具用它可以提交TransactSQL语言然后发送到服务器并返回执行结果该工具支持基于任何服务器的任何数据库连接。,性能监视器SQLServer提供了监视服务器性能和活动的功能其功能是在选择的计数器上设置阀值当达到阀值时产生警告。利用性能监视器可以创建、观察和保存功能图表用户可以选择对象和计数器并把它们添加到图表中不同颜色的图表代表不同的计数器如果要使图表较小并且可读可以创建不同的图表来监视不同的统计类型。,活动监视器SQL活动监视器是图形工具使系统管理员得以监视SQLServer实例中的事件可以捕获有关每个事件的数据并将其保存到文件或SQLServer表中供以后分析信息管理、用DELETE语句删除“离散数学”的课程信息。DELTEFROMxskcwhere课程名=离散数学、用DELETE语句删除年出生的学生信息。DELTEFROMxsqkwhere出生年月between‘’and‘’、用DELETE语句删除不及格的选课信息。DELETEFROMxscjwhere成绩<、用TRUNCATETABLE语句删除xsqk表中的所有信息。TRUNCATETABLExsqk实验五:数据查询简单查询一、实验目的通过对SELECT的使用掌握SELECT语句的结构及其应用掌握基于单个表的查询。二、原理解析语法格式为:SELECT〈目标列组〉FROM〈数据源〉WHERE〈元组选择条件〉GROUPBY〈分列组〉HAVING〈组选择条件〉ORDERBY〈排序列〉〈排序要求〉…n()SELECT子句SELECT子句用于指明查询结果集的目标列。()FROM子句FROM子句用于指明查询的数据源。()WHERE子句WHERE子句通过条件表达式描述关系中元组的选择条件。()GROUPBY子句GROUPBY子句的作用是按分组列的值对结果集分组。()ORDERBY子句ORDERBY子句的作用是对结果集进行排序。三、实验内容()取出生年月小于’’的学生名单。select*fromxsqkwhere出生年月<''()检索xsqk表中的所有记录数据。select*fromxsqk()查询班级为“计算机”的学生情况。select*fromxsqkwhere班级='计算机'()查询出生年月在“”至“”之间的学生情况。select*fromxsqkwhere出生年月between''and''()查询姓名中含有“红”字的学生情况。select*fromxsqkwhere姓名like'红'()查询出生年月在“”至“”之间的学生情况并以出生年月按降序排列。select*fromxsqkwhere出生年月between''and''orderby出生年月desc()统计学生情况(xsqk)表中“计算机”的班级有多少人。selectcount(学号)fromxsqkwhere班级='计算机'()统计学生成绩(xscj)表中每门课程的最低分、最高分和平均分。select课程号,max(成绩)最高分,min(成绩)最低分,avg(成绩)平均分fromxscjgroupby课程号()在学生成绩库中查询出生年月在“”至“”之间的男生情况并以出生年月按降序排列。select*fromxsqkwhere出生年月between''and''and性别='男'orderby出生年月desc()统计“信息管理”专业的人数。selectcount(学号)fromxsqkwhere专业='信息管理'()统计每个学生每个学期的最低分、最高分及平均分。select学号,max(成绩)最高分,min(成绩)最低分,avg(成绩)平均分fromxscjgroupby学号实验六:数据查询()连接查询一、实验目的通过对SELECT的使用掌握SELECT语句的结构及其应用掌握连接查询。二、原理解析语法格式为:SELECT〈目标列组〉FROM〈数据源〉WHERE〈元组选择条件〉GROUPBY〈分列组〉HAVING〈组选择条件〉ORDERBY〈排序列〉〈排序要求〉…n()SELECT子句SELECT子句用于指明查询结果集的目标列。()FROM子句FROM子句用于指明查询的数据源。()WHERE子句WHERE子句通过条件表达式描述关系中元组的选择条件。()GROUPBY子句GROUPBY子句的作用是按分组列的值对结果集分组。()ORDERBY子句ORDERBY子句的作用是对结果集进行排序。三、实验内容查询学号为的学生所选的全部课程的课程名和成绩select课程名,成绩fromxscj,xskcwherexscj课程号=xskc课程号and学号=''查询没有学生选的课程号select课程号fromxskcwhere课程号notin(selectdistinct课程号fromxscj)或select课程号fromxskcwherenotexists(select课程号fromxscjwherexskc课程号=xscj课程号)查询没有成绩的课程号课程名select姓名,课程号,课程名fromxscj,xskcwhere成绩isandxscj课程号=xskc课程号andxscj学号=xsqk学号查询没有选修号课程的学生姓名select姓名fromxsqkwherenotexists(select*fromxscjwherexscj学号=xsqk学号and课程号='')或select姓名fromxsqkwhere学号notin(select学号fromxscjwhere课程号='')查询选修了课程并且成绩在分以上的所有学生(学号、姓名)。selectxsqk学号,姓名fromxscj,xsqkwherexscj学号=xsqk学号and成绩>=and课程号=''查询与“王玲玲”在同一专业学习的学生姓名。select姓名fromxsqkwhere专业=(select专业fromxsqkwhere姓名='王玲玲')查询选修了课程名为“计算机文化基础”的学生学号和姓名。selectxsqk学号,姓名fromxsqk,xskc,xscjwherexsqk学号=xscj学号andxskc课程号=xscj课程号and课程名='计算机文化基础'查询选修了课程名为“计算机文化基础”或“数据结构”的学生学号和姓名。selectxsqk学号,姓名,课程名fromxsqk,xskc,xscjwherexsqk学号=xscj学号andxskc课程号=xscj课程号and(课程名='计算机文化基础'or课程名='数据结构')统计每个学生每个学期的最低分、最高分及平均分。select学号,开课学期,min(成绩)as最低分,max(成绩)as最高分,avg(成绩)as平均分fromxscj,xskcwherexscj课程号=xskc课程号groupby学号,开课学期查询每门课程的最高分(课程号、课程名、最高成绩)。selectxscj课程号,课程名,max(成绩)as最高分fromxscj,xskcwherexscj课程号=xskc课程号groupbyxscj课程号,课程名查询所有有选课记录的学生的情况(姓名课程名成绩。)selectxsqk*,课程名,成绩fromxscj,xskc,xsqkwherexscj学号=xsqk学号andxscj课程号=xskc课程号或select姓名,课程名,成绩fromxscj,xskc,xsqkwherexscj学号=xsqk学号andxscj课程号=xskc课程号查询选修了学号为“”的学生所选的某门课程的学生编号。selectdistinct学号fromxscjwhere课程号in(select课程号fromxscjwhere学号='')实验七:数据查询()综合一、实验目的通过对SELECT的使用掌握SELECT语句的结构及其应用掌握连接查询。二、原理解析语法格式为:SELECT〈目标列组〉FROM〈数据源〉WHERE〈元组选择条件〉GROUPBY〈分列组〉HAVING〈组选择条件〉ORDERBY〈排序列〉〈排序要求〉…n()SELECT子句SELECT子句用于指明查询结果集的目标列。()FROM子句FROM子句用于指明查询的数据源。()WHERE子句WHERE子句通过条件表达式描述关系中元组的选择条件。()GROUPBY子句GROUPBY子句的作用是按分组列的值对结果集分组。()ORDERBY子句ORDERBY子句的作用是对结果集进行排序。三、实验内容、查询所有学生的姓名和课程名称。、查询平均成绩在分以上的学生姓名。、查询每个学生的姓名、所选修的课程名及成绩。、查询选修了课程的学生姓名。、查询选修课程数在两门以上的学生姓名。(用连接查询和嵌套查询两种方法实现)、查询成绩及格的学生人数。、查询成绩及格的学生人次。、查询所有学生都没有选修的课程名称。、查询每个学生的平均成绩并按平均成绩的降序排序。、查询每个同学的最高分要求显示学号、姓名和分数等信息。、查询选修同一门课程的学生学号。实验八:视图一、实验目的通过实验使学生掌握视图的创建、视图的查询以及通过视图更新(插入、修改、删除)基本表中的数据。二、原理解析、用SQLServer的SQLServerManagementStudio创建视图用SQLServer的SQLServerManagementStudio创建视图比较简单只要打开视图设计器对视图进行编辑就可以完成视图的创建。、用TSQL的CREATEVIEW语句创建视图CREATEVIEW语句的语法结构如下:CREATEVIEW视图名(列名,列名,„n)WITH属性AS查询语句WITHCHECKOPTION、视图查询视图创建后就可以像使用基本表一样来使用可以通过视图进行查询。基于视图的查询能够简化查询语句。、视图更新通过视图更新可以实现基本表数据的更新视图更新包括视图的插入、修改和删除操作。、视图删除DROPVIEW视图名三、实验内容、用SQLServerManagementStudio创建视图、用CREATEVIEW语句创建视图、视图查询、视图更新、视图删除四、实验步骤一、实验目的通过实验使学生掌握视图的创建、视图的查询以及通过视图更新(插入、修改、删除)基本表中的数据。二、原理解析、用SQLServer的SQLServerManagementStudio创建视图用SQLServer的SQLServerManagementStudio创建视图比较简单只要打开视图设计器对视图进行编辑就可以完成视图的创建。、用TSQL的CREATEVIEW语句创建视图CREATEVIEW语句的语法结构如下:CREATEVIEW视图名(列名,列名,„n)WITH属性AS查询语句WITHCHECKOPTION、视图查询视图创建后就可以像使用基本表一样来使用可以通过视图进行查询。基于视图的查询能够简化查询语句。、视图更新通过视图更新可以实现基本表数据的更新视图更新包括视图的插入、修改和删除操作。、视图删除DROPVIEW视图名三、实验内容、用SQLServerManagementStudio创建视图、用CREATEVIEW语句创建视图、视图查询、视图更新、视图删除四、实验步骤、用SQLServerManagementStudio创建视图。为学生情况(XSQK)表创建一个视图VXSQK以显示学生的基本信息如学号、姓名、性别和出生年月。、用TSQL的CREATEVIEW语句创建上述视图。CREATEVIEWVXSQKASSELECT学号,姓名,性别,出生年月FROMXSQK、用CREATEVIEW语句创建视图VStudent要求显示学生的姓名、选修的课程名和成绩。CREATEVIEWVStudentASSELECT姓名课程名成绩FROMxsqkxscjxskcWHERExsqk学号=xscj学号andxscj课程号=xskc课程号、查询在以后出生的学生信息包括学号姓名性别和出生年月。SELECT*FROMVXSQKWHERE出生年月>、查询成绩合格的学生信息包括姓名、课程名和成绩。SELECT姓名课程名成绩FROMVSTUDENTWHERE成绩>、创建分组视图VSTUDENT要求查询每个学生的平均成绩包括姓名平均成绩。CREATEVIEWVSTUDENT(姓名,平均成绩)ASSELECT姓名AVG(成绩)FROMxsqkxscjxskcWHERExsqk学号=xscj学号andxscj课程号=xskc课程号GROUPBY姓名、向视图VXSQK中插入一条记录:‘’‘李红’‘’并观察XSQK表中的数据是否发生变化。INSERTINTOVXSQKVALUES(‘’‘李红’‘’)、修改视图VXSQK将李红同学是出生年月改为并观察XSQK表中数据的变化。UPDATEVXSQKSET出生年月=‘’WHERE姓名=‘李红’、删除视图VXSQK中李红同学的信息并观察XSQK表中数据的变化。DELETEFROMVXSQKWHERE姓名=‘李红’、查询平均成绩在分以上的学生信息包括姓名和平均成绩。SELECT*FROMVSTUDENTWHERE平均成绩>实验九:约束、默认、规则一、实验目的通过数据库中约束、默认和规则的使用掌握约束、默认、规则的概念及约束、默认、规则的操作和使用方法。二、原理解析数据完整性维护数据库输入数据的正确性和一致性通过定义数据完整性规则SQLServer可以通过自身提供的完整性规则有效地管理数据的输入而不必要使用额外的应用程序来协助管理这样一方面可以节省系统开销另一方面使数据库中的数据独立于应用程序使创建开放式数据库系统成为可能。数据完整性包括实体的完整性、域完整性、参照完整性和用户自定义完整性。、实体完整性实体完整性将记录行定义为特定表的唯一实体。实体完整性强制表中的所有记录都有一个惟一的标识符列(通过UNIQUE约束、PRIMARYKEY约束或IDENTITY属性)。例如:在学生情况表中学生的学号是惟一的它与每个学生一一对应。、域完整性域完整性是指给定列的输入有效性。强制域有效性的方法有:通过限制数据类型(包括自定义数据类型)、格式(CHECK约束和规则)或可能的取值范围(FOREIGNKEY约束、CHECK约束、DEFAULT定义、NOT定义和规则)来实现。、参照完整性参照完整性能确保数据库中数据的一致性。在SQLServer中参照完整性基于外键与主键之间或外键与唯一键之间的关系(通过FOREIGNKEY和CHECK约束)。参照完整性确保键值在所有表中一致这样的一致性要求不能引用不存在的值(即指向不存在的行)。如果在被参考的表中某一记录被外部键参考则该记录就不能删除若需要更改键值那么在整个数据库中对该键值的所有引用都要进行一致的更改。参照完整性在输入或删除记录时保持表之间已定义的关系。当设置了参照完整性时SQLServer将从以下几个方面限制用户对数据库的操作:当主表中没有关联的记录时向一个相关表添加记录。更改了主表中的键值但没有更改相关表中的数据从而使相关表中的记录无法在主表中找到对应记录。从主表中删除记录但在相关表中仍存在与该记录相匹配的记录。例如:在学生成绩库中只要学生在成绩表中有成绩记录则该学生记录就不能直接在学生情况表中删除。、用户定义完整性可以在SQLServer中定义不属于上述类别的特定规则的用户完整性定义。所有的完整性类型都支持用户定义完整性(CREATETABLE中的所有列级和表级约束、存储过程和触发器)。在SQLServer中有两种方式可以实现数据完整性声明数据完整性和过程数据完整性。声明数据完整性是通过在对象定义中定义的标准来实现数据完整性是由系统本身的自动强制功能来实现的它包含使用各种约束、默认和规则。而过程数据完整性是通过在脚本语言(使用触发器或存储过程)中定义的完整性标准来实现的当这些脚本被执行时就可以强制完整性的实现。三、实验内容()对学生情况表xsqksample使用NOT约束限制系别、学号和姓名列不能为空使用PRIMARYKEY约束将学号设置为主键使用CHECK约束对性别列中的值进行限制使其值只能接受“男”或“女”以强制执行域的完整性性别的默认值为“男”。CREATETABLExsqksample(系别char()not班级char(),专业Varchar(),学号char()notprimarykey,姓名Varchar()not,性别char()default‘男’,出生年月smalldatetime,总学分tinyint,备注text,CONSTRAINTchkSexCHECK(性别in(‘男’‘女’)))()在学生课程表中创建DEFAULT约束约束名为PeriodDef要求实现使学时列的默认值设置为。altertablexskcaddconstraintPeriodDefdefaultfor学时()在学生成绩表中创建FOREIGNKEY约束约束名为ConCourseNo要求实现把学生成绩表中的“课程号”列和学生课程表中的“课程号”关联起来。altertablexscjaddconstraintConCourseNoforeignkey(课程号)referencesxskc(课程号)()为学生课程表中的学分列定义一个DEFAULT约束默认值为。altertablexskcaddconstraintxdefaultfor学分()在学生成绩表中定义FOREIGNKEY约束把学生成绩表中的“学号”列和学生情况表中的“学号”关联起来。altertablexscjaddconstraintConStudentNoforeignkey(学号)referencesxsqk(学号)()创建一个默认值为''的默认值。createdefaultyas''()将创建的DefaultBirthday默认值绑定到学生情况表的出生年月列上。spbindefault'y','xsqk出生年月'()创建一个规则ruleTermRange用以限制输入该规则所绑定的列中的数据范围为,。createruleruleTermRangeasrange>=andrange<=()将上题创建的ruleTermRange规则绑定到学生课程表的开课学期列上。spbindrule'ruleTermRange','xskc开课学期'()定义一个规则ruleSpeciality这个规则限制学生情况表中的专业列只能取以下的值:计算机应用与维护、信息管理、电子商务、电子技术。绑定后给学生情况表插入数据行观察规则的设置情况使用完毕后解除并删除该规则。实现过程要求使用SQL语句完成。createruleruleSpecialityaszyin('计算机应用与维护','信息管理','电子商务','电子技术')spbindrule'ruleSpeciality','xsqk专业'spunbindrule'xsqk专业'dropruleruleSpeciality()将上述题目中的要求在SQLServerManagementStudio中加以实现。实验十:存储过程一、实验目的通过实验使学生加深对数据完整性的理解学会创建和使用存储过程。二、原理解析、存储过程概述存储过程是指在一个执行规划中预先定义并编译好的一组TransactSQL语句。这些语句在一个名称下存储并作为一个单元进行处理。存储过程是编写数据库代码中的重要成份。它们可以是构成任何一个由数据库支撑的应用程序的代码并且能被这些应用程序中的任何一个调用。存储过程能在查询分析器(QueryAnalyzer)窗口运行。它们可以被批处理文件调用也可以由Access、VisualBasic或者其他编程语言的用户接口程序来调用。可以像其他子例程调用一样把参数传给存储过程。存储过程会返回数据值、状态代码以及错误信息这样用户就可以做出适当的响应。存储过程也能调用其他存储过程。存储过程能够在本地计算机或远程服务器上运行。在执行系统内部任务时用户可以指示SQLServer自动运行某种存储过程。存储过程类型包括系统存储过程、本地存储过程、临时存储过程、远程存储过程和扩展存储过程。通过存储过程的创建、执行、修改和删除操作初步了解存储过程的类型掌握利用存储过程进行程序设计的方法技巧。、存储过程的类型系统存储过程、用户自定义存储过程、扩展存储过程。、在SQL中创建存储过程的语法创建存储过程的语法为:CREATEPROCEDUREprocedurenamenumber{parameterdatatype}VARYING=defaultOUTPUT,nWITH{RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION}FORREPLICATIONASsqlstatementn、存储过程的执行执行存储过程:EXECUTE{returnstatus={procedurenamenumber|procedurenamevar}parameter={value|variableOUTPUT|DEFAULT},nWITHRECOMPILE、存储过程中的参数输入参数和输出参数(OUTPUT)。三、实验内容()创建不带参数的存储过程。()创建带输入参数的存储过程。()创建带输出参数的存储过程。四、实验步骤在学生成绩库中创建存储过程存储过程名为proc要求实现如下功能:根据学生学、号查询该学生的选课情况其中包括该学生学号、姓名、性别、课程号、课程名、成绩和学分等。CREATEPROCEDUREprocsnochar()sno是参数字符型表示某个学生的学号ASSELECTxscj学号,xsqk姓名,xsqk性别,xscj课程号,xskc课程名,xscj成绩,xscj学分FROMxscj,xsqk,xskcWHERExscj学号=xsqk学号ANDxscj课程号=xskc课程号ANDxsqk学号=snoGO、现有一学生学号为“”要求通过调用上例中所建的名为proc的存储过程实现显示该学生的选课情况列表。EXECUTEproc„或EXECUTEprocsno=„或EXECprocsno=、在学生成绩库中创建一个名为proc的存储过程产生一个学生选课情况列表其中包括学号、姓名、性别、课程号、课程名、成绩、学分等并调用该存储过程查看学生的选课情况。CREATEPROCEDUREprocASSELECTxscj学号,xsqk姓名,xsqk性别,xscj课程号,xskc课程名,xscj成绩,xscj学分FROMxscj,xsqk,xskcWHERExscj学号=xsqk学号ANDxscj课程号=xskc课程号GOEXECproc、在学生成绩库中创建一个名为proc的存储过程产生某门课程的选课学生情况列表其中包括课程号、课程名、学号、姓名、系别、班级、专业、性别等。要求输入某门课程的课程号得到上述信息。CREATEPROCEDUREproccnochar()cno是参数字符型表示某门课的课程号ASSELECTxscj课程号,xskc课程名,xscj学号,xsqk姓名,xsqk系别,xsqk班级,xsqk专业,xsqk性别FROMxscj,xsqk,xskcWHERExscj学号=xsqk学号ANDxscj课程号=xskc课程号ANDxscj课程号=cnoGO、利用上述存储过程查询课程号为“”的课程的选课学生情况列表。ExecProc„、定义存储过程proc要求实现输入学生学号根据该学生所选课程的平均成绩显示提示信息即如果平均成绩在分以上显示“此学生综合成绩合格~”否则显示“此学生综合成绩不合格~”。CREATEPROCEDUREprocsnochar()sno是参数字符型表示学生的学号ASDECLAREsavgtinyint声明变量savg用于存放学生平均成绩SELECTsavg=avg(成绩)FROMxscjWHERExscj学号=sno变量savg存放学号为sno的学生平均成绩IFsavg>=进行平均成绩的判断PRINT„此学生综合成绩合格~ELSEPRINT„此学生综合成绩不合格~GO、利用已创建的存储过程查询学号为“”同学的平均成绩情况。Execproc„、定义存储过程proc要求实现输入学号输出该学生所选课程的平均成绩要求用输入参数和输出参数实现。CREATEPROCEDUREprocsnochar(),avgscoreintOUTPUTASIFsno=BEGINPRINT„学号不能为空~RETURNENDSELECTavgscore=AVG(成绩)fromxscjWHERE学号=snoRETURN、利用创建的存储过程查询学号为“”的同学的平均成绩。DECLAREavgscoreintEXECUTEproc„,avgscoreOUTPUTSELECT„Hisaveragescoreis:,avgscore、定义存储过程proc要求实现如下功能:根据某学生的学号查询该生的已修学分如果已修学分>则将已修学分加分如果已修学生小于则将已修学分加分。createprocprocsnochar(),xxftinyintoutputasdeclareyxftinyintselectyxf=总学分fromdboxsqkwhere学号=snoifyxf>updatedboxsqkset总学分=总学分where学号=snoelseupdatedboxsqkset总学分=总学分where学号=snoselectxxf=总学分fromdboxsqkwhere学号=sno、利用已经创建的存储过程查询学号为“”的同学修改后的已修学分。declarexxftinyintexecproc'',xxfoutputselectXxf实验十一:触发器()一、实验目的通过实验使学生加深对数据完整性的理解学会创建触发器会用触发器实现复杂的数据库完整性。二、原理解析、触发器概述触发器是一种特殊类型的存储过程用于保证数据完整性。事实上它是一组SQL语句。当表中的一行被插入、修改或删除时触发器被执行。触发器与一般存储过程有一些区别例如存储过程可以直接调用但是触发器不能被直接调用执行只能由系统自动激活。触发器主要的用途是维护行级数据的完整性而不是返回结果。、触发器的类型插入INSERT、更新UPDATE、删除DELETE。、在SQL中创建触发器的语法创建触发器的语法为:CREATETRIGGERtriggernameON{table|view}WITHENCRYPTION{{{FOR|AFTER|INSTEADOF}{INSERT,UPDATE}WITHAPPENDNOTFORREPLICATIONAS{IFUPDATE(column){AND|OR}UPDATE(column)n|IF(COLUMNSUPDATED(){bitwiseoperator}updatedbitmask){comparisonoperator}columnbitmaskn}sqlstatementn}}三、实验内容()创建INSERT类型触发器。()创建DELETE类型触发器。()创建UPDATE类型触发器。四、实验步骤()在学生成绩库中创建触发器trigger实现如下功能:当在学生成绩表(xscj)中插入一条学生选课信息后自动实现更新该学生在学生情况表(xsqk)中的总学分信息。分析:根据题意也即要求在学生成绩表中插入一条记录时自动更新学生情况表中的相应记录信息。可以通过在学生成绩表中定义INSERT类型的触发器触发器中语句要完成的功能是更新学生情况表中的相应学生的总学分信息。其实只要在该生原总学分基础上加上新选课程的学分就可以了。USEStuScore切换到学生成绩库GOCREATETRIGGERtriggerONxscj创建触发器triggerFORINSERTAS定义变量xh表示学号定义变量xf表示学分DECLARExhchar(),xftinyint从inserted表取出新插入的学生选课记录的学号与学分分别赋给变量xh和xfSELECTxh=学号,xf=学分FROMinserted更新学生情况表中指定学号的学生的总学分其中IS为函数用替换原总学分中的空值UPDATExsqkSET总学分=IS(总学分,)xfWHERE学号=xhGO()创建触发器trigger实现当修改学生课程表(xskc)中的数据时显示提示信息“学生课程表被修改了”。USEStuScoreGOCREATETRIGGERtriggerONxskcFORUPDATEASPRINT'学生课程表被修改了'GO()创建触发器trigger实现当删除学生课程表中某门课程的记录时对应学生成绩表中所有有关此课程的记录均删除。USEStuScoreGOCREATETRIGGERtriggerONxskcFORDELETEASDELETExscjFROMxscj,deletedWHERExscj课程号=deleted课程号GO()创建触发器trigger实现当修改学生课程表(xskc)中的某门课的课程号时对应学生成绩表(xscj)中的课程号也作相应修改。USEStuScoreGOCREATETRIGGERtriggerONxskcFORUPDATEASIFupdate(课程号)BEGINUPDATExscjSET课程号=(SELECT课程号FROMinserted)FROMxscj,deletedWHERExscj课程号=deleted课程号ENDGO()创建触发器trigger实现当向学生成绩表(xscj)中插入一条选课记录时查看该学生的信息是否存在在学生信息表中如果不存在则把该学生的基本信息加入到学生信息表中。usestuscoregocreatetriggertriggeronxscjforinsertasdeclarexhchar()selectxh=学号frominsertedifnotexists(select*fromdboxsqkwhere学号=xh)insertintodboxsqk(学号,姓名)values(xh,'zhangsan')测试:insertintoxscjvalues('','',,)()创建触发器trigger实现当向学生成绩表(xscj)中插入一条选课记录时调用实验九中创建的存储过程proc实现统计该生的平均成绩功能。存储过程的创建:CREATEPROCEDUREprocsnochar(),avgscoreintOUTPUTASIFsno=BEGINPRINT'学号不能为空~'RETURNENDSELECTavgscore=AVG(成绩)fromxscjWHERE学号=snoRETURN在触发器中调用存储过程:createtriggertriggeronxscjforinsertasbegindeclarexhchar(),avgscoreintselectxh=学号frominsertedexecprocxh,avgscoreoutputselectavgscoreend实验十二:触发器()一、实验目的通过实验使学生加深对数据完整性的理解学会创建触发器会用触发器实现复杂的数据库完整性。二、原理解析、触发器概述触发器是一种特殊类型的存储过程用于保证数据完整性。事实上它是一组SQL语句。当表中的一行被插入、修改或删除时触发器被执行。触发器与一般存储过程有一些区别例如存储过程可以直接调用但是触发器不能被直接调用执行只能由系统自动激活。触发器主要的用途是维护行级数据的完整性而不是返回结果。、触发器的类型插入INSERT、更新UPDATE、删除DELETE。、在SQL中创建触发器的语法创建触发器的语法为:CREATETRIGGERtriggernameON{table|view}WITHENCRYPTION{{{FOR|AFTER|INSTEADOF}{INSERT,UPDATE}WITHAPPENDNOTFORREPLICATIONAS{IFUPDATE(column){AND|OR}UPDATE(column)n|IF(COLUMNSUPDATED(){bitwiseoperator}updatedbitmask){comparisonoperator}columnbitmaskn}sqlstatementn}}三、实验内容()创建INSERT类型触发器。()创建DELETE类型触发器。()创建UPDATE类型触发器。四、实验步骤()在学生成绩库中创建触发器trigger实现如下功能:当在学生成绩表(xscj)中插入一条学生选课信息后查看该学生的信息是否存在在学生信息表中如果不存在则给出“该记录不能被插入~”的错误提示并撤销插入操作同样如果课程信息在课程信息表中不存在给出“该记录不能被插入~”的错误提示并撤销插入操作。createtriggertriggeronxscjforinsertasdeclaresnochar(),cnochar()selectsno=学号,cno=课程号frominsertedifnotexists(select*fromxsqkwhere学号=sno)ornotexists(select*fromxskcwhere课程号=cno)beginraiserror('学生信息或课程信息不存在该信息不允许插入~',,)rollbacktranreturnend测试:insertintoxscj(学号,课程号)values('','')()创建触发器trigger强制实现业务规则:当向学生成绩表中插入一条记录时自动修改学生情况表中该学生的总学分要求总学分为该学生所有已修课程的学分总和。createtriggertriggeronxscjforinsertasdeclarezxftinyint,snochar()selectsno=学号frominsertedselectzxf=sum(学分)fromxscjwhere学号=snoupdatexsqkset总学分=zxfwhere学号=sno()在数据库中用以下语句创建两张表:CREATETABLE卷烟销售表(卷烟品牌VARCHAR()PRIMARYKEYNOT,购货商VARCHAR(),销售数量INT,销售单价MONEY,销售金额MONEY)GO业务规则:库存金额=库存数量*库存单价业务规则。CREATETABLE卷烟库存表(卷烟品牌VARCHAR()PRIMARYKEYNOT,库存数量INT,库存单价MONEY,库存金额MONEY)GO创建触发器TINSERT卷烟库存表实现每当卷烟库存表发生INSERT动作则引发该触发器。触发器功能:强制执行业务规则保证插入的数据中库存金额=库存数量*库存单价。针对卷烟库存表插入测试数据:注意第一条数据(红塔山新势力)中的数据符合业务规则第二条数据(红塔山人为峰)中库存金额空不符合业务规则第三条数据(云南映像)中库存金额不等于库存数量乘以库存单价不符合业务规则。第四条数据库存数量为。请注意在插入数据后检查卷烟库存表中的数据是否库存金额=库存数量*库存单价。INSERTINTO卷烟库存表(卷烟品牌,库存数量,库存单价,库存金额)values('红塔山新势力',,,)INSERTINTO卷烟库存表(卷烟品牌,库存数量,库存单价,库存金额)values('红塔山人为峰',,,)INSERTINTO卷烟库存表(卷烟品牌,库存数量,库存单价,库存金额)values('云南映像',,,)INSERTINTO卷烟库存表(卷烟品牌,库存数量,库存单价,库存金额)values('玉溪',,,)IFEXISTS(SELECTNAMEFROMSYSOBJECTSWHEREXTYPE=TRANDNAME=TINSERT卷烟库存表)DROPTRIGGERTINSERT卷烟库存表GOCREATETRIGGERTINSERT卷烟库存表ON卷烟库存表FORINSERTAS提交事务处理BEGINTRANSACTION强制执行下列语句保证业务规则UPDATE卷烟库存表SET库存金额=库存数量*库存单价WHERE卷烟品牌IN(SELECT卷烟品牌fromINSERTED)COMMITTRANSACTIONGO()创建触发器TINSERT卷烟销售表实现每当卷烟库存表发生INSERT动作则引发该触发器。触发器功能:实现业务规则:如果销售的卷烟品牌不存在库存或者库存为零则返回错误。否则则自动减少卷烟库存表中对应品牌卷烟的库存数量和库存金额。CREATETRIGGERTINSERT卷烟销售表ON卷烟销售表FORINSERTASBEGINTRANSACTION检查数据的合法性:销售的卷烟是否有库存或者库存是否大于零IFNOTEXISTS(SELECT库存数量FROM卷烟库存表WHERE卷烟品牌IN(SELECT卷烟品牌FROMINSERTED))BEGIN返回错误提示RAISERROR('错误~该卷烟不存在库存不能销售。',,)回滚事务ROLLBACKRETURNENDIFEXISTS(SELECT库存数量FROM卷烟库存表WHERE卷烟品牌IN(SELECT卷烟品牌FROMINSERTED)AND库存数量<=)BEGIN返回错误提示RAISERROR('错误~该卷烟库存小于等于不能销售。',,)回滚事务ROLLBACKRETURNEND()分别用触发器和存储过程实现对学生情况表(xsqk)和学生成绩表(xscj)表的级联删除。存储过程:createprocedurepdelsnovarchar()asbegindeletescorewheresno=snodeletestudentwheresno=snoend触发器:createtriggertrstudentdeleteonxsqkfordeleteasdeclarenumchar()selectnum=学号fromdeleteddeletexscjwhere学号=numgo()创建触发器要求实现:当向xscj表插入一条记录时判断该学生的总学分如果总学分大于等于则给出“该学生已修满不需要再选修~”的提示信息否则自动更新该学生的总学分。createtriggertirggeronxscjforinsertasdeclaresnochar()selectsno=学号frominsertedif(select总学分fromxsqkwhere学号=sno)>=beginraiserror('该学生已修满不需要再选修!',,)rollbacktranreturnendelsebegindeclarexftinyintselectxf=学分frominsertedupdatexsqkset总学分=总学分xfwhere学号=snoend实验十三:安全性管理一、实验目的通过实验使学生理解SQLServer数据库安全性的管理方法。二、原理解析、SQLServer登录帐号与登录有关的存储过程:spaddlogin创建SQLServer登录帐号spdroplogin删除SQLServer登录帐号spgrantlogin创建windows登录帐号sprevokelogin删除windows用户或用户组在SQLServer上的登录信息spdenylogin拒绝某一windows用户或用户组连接到SQLServer、数据库用户帐号只有数据库用户才具有访问、操作该数据库的权限某一登录帐号要获得操作数据库的权限必须与相应的数据库用户相映射。与数据库用户帐号有关的存储过程:spgrantdbaccess创建一个数据库用户sprevokedbaccess删除一个数据库用户、角色管理可以把一些用户归入某一角色这样只要角色具有了一定的权限用户相应地从该角色继承了相应的权限角色的提出有利于权限的管理。角色可分为固定服务器角色和数据库角色。与角色有关的存储过程:spaddsrvrolemember添加固定服务器角色成员spaddrole向数据库添加一角色spaddrolemember添加数据库角色成员spdropsrvrolemember删除固定服务器角色成员spdroprolemember删除数据库角色成员spdroprole删除角色注意:删除角色前必须删除角色成员。、许可管理许可是用来授权用户可以使用数据库中数据和执行数据库操作。许可授予grant语句许可禁止deny语句许可收回revoke语句三、实验内容()登录帐号的管理。()数据库用户帐号的管理。()角色管理。()许可管理。四、实验步骤()创建SQLServer登录帐号aa赋予其系统管理员角色。spaddlogin'aa',''spaddsrvrolemember'aa','sysadmin'()赋予windows登录帐号bb在数据库StuScore上的dbowner访问权限。spgrantlogin'tjfbb'usestuscoregospaddrolemember'dbowner','tjfbb'()创建SQLServer登录帐号LoginT其在StuScore数据库上的对应用户为userT。spaddlogin'loginT','T'usestuscoregospgrantdbaccess'loginT','userT'()删除userT所对应的登录帐号loginT。Spdroplogin'loginT'()删除StuScore数据库用户帐号userT。sprevokedbaccess'userT'()在服务器上创建一Windows用户组gg接着创建Windows用户cc并使cc隶属于组gg然后分别将gg和cc授权登录和访问SQLServer系统。依次利用此账号作测试登录。测试成功后运行脚本:sprevokelogin'cc'然后以cc登录SQlServer系统能否成功。运行脚本:spaddlogin'cc','cc'Gospdenylogin'cc'Go再以cc登录SQLServer系统测试能否成功。()利用系统存储过程为数据库StuScore创建一数据库角色myrole并创建一个数据库用户myuser(对应登录名)使其属于角色myrole。spaddrolemyrolespaddlogin'',''spgrantdbaccess'','myuser'spaddrolemember'myrole','myuser'()将数据库用户myuser添加为数据库StuScore的dbowner角色。spaddrolemember'dbowner','myuser'()在SQLServer查询分析器中执行下列脚本并查看数据库myTestDB。创建范例数据库myTestDBCreateDatabasemyTestDBGo创建测试用表stud和studusemyTestDBGoCreateTablestud(nochar(),namechar(),ageint)GoCreateTablestud(nochar(),namechar(),addressvarchar())Go添加测试数据InsertIntostud(no,name,age)Values('','aa',)GoInsertIntostud(no,name,age)Values('','bb',)GoInsertIntostud(no,name,address)Values('','aa','zhejiang')GoInsertIntostud(no,name,address)Values('','bb',',hangzhou')Go)执行下列脚本并查看数据库myTestDB登录账号、数据库用户账号和角色。创建登录账号loginA和loginB口令分别为a和bspaddlogin'loginA','a'Gospaddlogin'loginB','b'Go创建testDB数据库的userA和userB用户账号usemyTestDBGospgrantdbaccess'loginA','userA'Gospgrantdbaccess'loginB','userB'Go添加testDB数据库的角色userNspaddrole'roleN'Go为角色roleN添加两用户userA和userBspaddrolemember'roleN','userA'Gospaddrolemember'roleN','userB'Go)断开SQLServer查询分析器连接重新以账号loginA登录执行下列脚本,查看结果(系统提示无Select权限)UsemyTestDBGoSelect*fromstudGo)断开SQLServer查询分析器连接以账号sa登录执行下列脚本。将testDB数据库中的表products的Select许可授予角色roleNUsemyTestDBGoGrantSelectOnstudToroleNGo将myTestDB数据库中的表stud的Insert,Update,Delete许可授予用户userA和userBGrantInsert,Update,DeleteOnstudTouserA,userBGo将myTestD数据库创建表的许可授予用户userAGrantCreateTableTouserAGo)断开SQLServer查询分析器连接重新以账号loginA登录重新执行脚本,查看结果(可检索表stud但无检索表stud权限)UsemyTestDBGoSelect*fromstudGoSelect*fromstudGo)断开SQLServer查询分析器连接重新以账号sa登录执行下列脚本。UsemyTestDBGo将userA对表stud的Select许可收回RevokeSelectOnstudTouserAGo)断开SQLServer查询分析器连接重新以账号loginA登录再执行下列脚本,查看结果(还是可以检索表stud因为虽然userA的Select许可被收回但由于角色roleN具有表stud的Select许可而userA作为角色roleN的成员继承了roleN的权限故还能Select表stud)UsemyTestDBGoSelect*fromstudGo)断开SQLServer查询分析器连接以账号sa登录执行下列脚本。UsemyTestDBGo将用户userA对表stud的Select许可否决DenySelectOnstudTouserAGo)断开SQLServer查询分析器连接重新以账号loginA登录再执行下列脚本,查看结果(此时将无法检索表stud)UsemyTestDBGoSelect*fromstudGo)执行下列脚本查看数据库用户信息和许可信息。UsemyTestDBGosphelprotectGosphelpuserG

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

评分:

/60

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利