资源描述
课程设计报告题目:数据库实验上机实验报告专业班级:计算机科学与技术1210 班学号:U9姓名:候宝峰指导教师:报告日期:2015-06-04计算机科学与技术学院目录一、基本 SQL操作(部分选做) . 错误 !未定义书签。1)数据定义 . 错误 !未定义书签。2)数据更新 . 错误 !未定义书签。3)用 SQL语句完成下述查询需求: . 错误 !未定义书签。二、 DBMS综合运用(部分选做) . . 错误 !未定义书签。1)学习 sqlserver 的两种完全备份方式: 数据和日志文件的脱机备份、系统的备份功能(选做) 。 . 错误 !未定义书签。2)学习系统的身份、权限配置操作 . 错误 !未定义书签。3)了解 SQLSERVER的存储过程、触发器、函数实现过程错误 ! 未定义书签。三、实验总结 .1)实验问题及解决.2)实验心得 .错误 !未定义书签。错误 !未定义书签。错误 !未定义书签。一、基本 SQL操作(部分选做)1)数据定义参照下面的内容建立自己实验所需的关系数据创建三个关系:商品表【商品名称、商品类型】GOODS【 GNAMEchar ( 20),GTYPEchar (10)】主关键字为(商品名称)。商品类型为(电器、文具、服装。)商场【商场名称, 所在地区】PLAZA【 PNAMEchar ( 20), PAREAchar (20)】主关键字为商场名称。所在地区为(洪山、汉口、汉阳、武昌。)销售价格表【商品名称、商场名称、当前销售价格、目前举办活动类型】SALE【 GNAME char(20), PNAMEchar ( 20), PRICEFLOAT,ATYPEchar (10)】主关键字为(商品名称、商场名称) 。举办活动类型为(送券、打折) ,也可为空值,表示当前未举办任何活动。表中记录如( 哈森皮靴 ,亚贸广场 ,200,打折),同一商场针对不同的商品可能采取不同的促销活动。create table goods(gname char(20) primary key,gtype char(10);create table plaza(pname char(20) primary key,parea char(20);create table sale(gname char(20),pname char(20),price FLOAT,atype char(10)check (atype in(送券 ,打折 ,),primary key(gname,pname),foreign key(gname)references goods(gname),foreign key(pname)references plaza(pname);图 1 goods 表图 2 plaza 表图 3 sale 表2)数据更新(1)向上述表格中用sql语句完成增、删、个、改的操作;增加记录:insert into goods( gname, gtype ) values( anta , 服装) ;删除记录: delete from goods where gname= 南孚 and gtype= 电池 ; 更新记录: update goods set gtype= 电器 where gname=飞科;(2)编写一个触发器,并测试该触发器;当插入一个“ anta ”货物时不能把它售价低于350 ,如果低于350 就修改成350createtriggerdbo. Chang_Update_saleon dbo. saleafterinsertasif ( selectcount (*) from sale , insertedwhere =antaand 30 );图10 查询56)查询以“送券”方式销售的商品总数超过30 种的商场所在地区;select pname, PAREAfrom plazawhere pname in(select distinct pNAMEfrom salewhere atype=送券 and gname in(select gNAMEfrom salegroup by gnamehaving count(*)30 );图11 查询67)查询价格为下列取值之一的商品名称、所在商场名称、目前举办活动的类型,( 88、188、288、 388、488、 588、 888);select gname,pname,atypefrom salewhere price in(88,188,288,388,488,588,888);图12 查询78)查询以“老”字开头的所有商品的名称;select * from goodswhere gname like 老 %图13 查询89)查询同时销售“剃须刀”和“电池”的商场名称;select pnamefrom salewhere gname= 南孚 and pname in(select pnamefrom salewhere gname=飞科 );图14 查询910)查询不举办任何活动的商场;select distinct ,PAREAfrom sale,plazawhere atype is null and =;图15 查询1011)查询所销售的商品包含了“校园超市”所销售的所有商品的商场名称。select distinct pnamefrom salewhere gname in(select gnamefrom salewhere pname= 家乐福 );图16 查询11二、 DBMS综合运用(部分选做)1)学习sqlserver的两种完全备份方式:数据和日志文件的脱机备份、系统的备份功能(选做)。利用企业管理器: 选择工具下的备份数据库: 还以利用企业管理器设置自动备份计划等;直接拷贝数据文件。把数据库的数据文件( *.mdf )和日志文件( *.ldf )都拷贝到目的服务器,在 SQL Server Query Analyzer 中用语句进行恢复: RESTORE DATABASE数据库名 | 数据库名变量 FROM ,.n WITH RESTRICTED_USER , NORECOVERY | RECOVERY | STANDBY = undo_file_name RESTORE LOG 数据库名 | 数据库名变量 FROM ,.n WITH RESTRICTED_USER , NORECOVERY | RECOVERY | STANDBY = undo_file_name 使得数据库恢复到备份状态。2)学习系统的身份、权限配置操作图 17 sql server安全性决策当 SQL Server 2014 在 Windows 上运行时, sysadmin 固定服务器角色成员可以指定下面两种身份验证模式之一:Windows 身份验证模式只进行 Windows 身份验证。 用户不能指定SQL Server 2014 登录 ID 。这是 SQL Server2014 的默认身份验证模式。 不能为在Windows 98 上运行的SQL Server实例指定 Windows身份验证模式,因为此操作系统不支持Windows 身份验证。当用户通过Windows NT或 Windows用户帐户进行连接时,SQL Server通过回叫Windows NT或 Windows 以获得信息,重新验证帐户名和密码。SQL Server通过使用网络用户的安全特性控制登录访问,以实现与Windows NT或Windows 的登录安全集成。用户的网络安全特性在网络登录时建立,并通过Windows 域控制器进行验证。当网络用户尝试连接时,SQLServer使用基于 Windows的功能确定经过验证的网络用户名。SQL Server于是验证此人是否是如其所说的那个人,然后只基于网络用户名允许或拒绝登录访问,而不要求单独的登录名和密码。说明如果用户试图通过提供空白登录名称连接到SQL Server的实例, SQLServer将使用 Windows身份验证。 此外,如果用户试图使用特定的登录连接到配置为Windows 身份验证模式的SQL Server实例,则将忽略该登录并使用Windows 身份验证。与 SQL Server身份验证相比,Windows 身份验证有某些优点,主要是由于它与Windows NT和 Windows 安全系统的集成。Windows NT和 Windows 安全系统提供更多的功能,如安全验证和密码加密、审核、密码过期、最短密码长度,以及在多次登录请求无效后锁定帐户。由于 Windows NT和 Windows 用户和组只由Windows NT或 Windows 维护,因此当用户进行连接时,SQL Server将读取有关该用户在组中的成员资格信息。如果对已连接用户的可访问权限进行更改,则当用户下次连接到SQL Server实例或登录到Windows NT或Windows 时(取决于更改的类型),这些更改会生效。混合模式如果用户在登录时提供了SQL Server2014 登录 ID ,则系统将使用SQL Server身份验证对其进行验证。如果没有提供SQL Server 2014登录 ID或请求 Windows 身份验证,则使用 Windows 身份验证对其进行身份验证。当用户用指定的登录名称和密码从非信任连接进行连接时,SQL Server通过检查是否已设置 SQL Server 登录帐户,以及指定的密码是否与以前记录的密码匹配,自己进行身份验证。如果 SQL Server 未设置登录帐户,则身份验证将失败,而且用户收到错误信息。提供 SQL Server身份验证是为了向后兼容性,因为为SQL Server版或更早的版本编写的应用程序可能要求使用SQL Server登录和密码。另外,当SQL Server实例在Windows 98上运行时,必须使用SQL Server身份验证,因为在Windows 98上不支持Windows 身份验证模式。因此,SQL Server在 Windows 98上运行时使用混合模式(但只支持 SQL Server身份验证)。尽管建议使用Windows 身份验证,但对于Windows NT和 Windows 客户端以外的其它客户端连接,可能需要使用SQL Server身份验证。说明当使用命名管道连接到在Windows NT或 Windows上运行的SQL Server实例时,用户必须有连接到Windows NT命名管道 IPC IPC$的权限。如果用户没有连接权限,则不能使用命名管道连接到SQL Server实例,除非计算机上的Windows NT或Windowsguest帐户已启用 (默认情况下禁用) ,或者给用户帐户授予 从网络访问该计算机的权限。设置 SQL Server 2014身份验证模式SQL Server2014 身份验证模式可以在安装过程中指定或使用SQL Server企业管理器指定,如下图。图 18 安全设置也可以通过修改注册表的方式来改变,如下图,它保存在HKEY_LOCAL_MACHINESOFTWAREMicrosoftMSSQLServerMSSQLServer 节的LoginMode 中。LoginMode 的键值: 1 表示 Windows 身份验证模式,2 表示混合模式。图 19 注册表更改注:改变模式后,必须重新启动SQL Server 2014联机丛书:SQL Server 2014才会生效。若要连接到Microsoft? SQL Server? 2000实例,只需给应用程序提供下面中的两条信息:运行 SQL Server实例的计算机所在的网络名称。实例名(可选,只有在连接到命名实例时才需要)。登录标识符(ID)。登录 ID是帐户标识符,用来控制对任何SQL Server 2014系统的访问权限。Server 2014 只有在首先验证了指定的登录ID有效后,才完成连接。这种登录验证称为身SQL份验证。在登录属性中,有一个是默认数据库。当一个登录连接到SQL Server时,这个默认数据库就变成该连接的当前数据库,除非该连接请求指定另一个数据库作为当前数据库。登录 ID仅能使您连接到SQL Server实例。特定数据库内的权限由用户帐户控制。数据库管理员将您的登录帐户映射到您有权访问的任何数据库中的用户帐户。Windows 身份验证SQL Server 2014 sysadmin固定服务器角色成员必须首先向SQL Server 2014指定所有允许连接到SQL Server 2014的 Microsoft Windows NT?或Microsoft Windows? 2000帐户或组。当使用 Windows 身份验证时,在连接到SQL Server 2014 时不必指定登录ID或密码。用户对SQL Server 2014的访问权限由Windows NT 或 Windows 帐户或组控制,当登录到客户端上的Windows 操作系统时需接受身份验证。当连接到 SQL Server 2014时, SQL Server 2014客户端软件向SQL Server 2014请求 Windows信任连接。 直到客户端使用有效的Windows 帐户成功登录后, Windows 才打开信任连接。信任连接的属性包括打开连接的客户端的Windows NT和 Windows 组及用户帐户。 SQLServer 2014 从信任连接属性中得到用户的帐户信息,并将它们与定义为有效SQLServer2014 登录的 Windows帐户相匹配。如果SQL Server2014 找到匹配的项,则接受这个连接。当使用Windows 身份验证连接到SQL Server 2014时,用户标识即是WindowsNT 或 Windows 组或用户帐户。MicrosoftWindows Me 和 Windows 98 操作系统不支持服务器端的信任连接API 。SQLServer在 Windows Me 或 Windows 98 上运行时不支持Windows 身份验证。用户在连接时必须提供SQL Server登录帐户。当SQL Server在 Windows NT或 Windows 上运行时,Windows Me、 Windows 98和 Windows 95客户端可以使用Windows 身份验证与其连接。sysadmin固定服务器角色成员首先向SQL Server 2014指定所有有效的SQL Server2014 登录帐户和密码。这些登录帐户和密码与用户的MicrosoftWindows 帐户或网络帐户无关。当连接到SQL Server 2014时,用户必须提供SQL Server 2014登录帐户和密码。系统将通过用户的SQL Server 2014登录帐户在SQL Server 2014中标识用户。由此可以看出,SQLServer 2014 安全控制是由登录用户 权限来得到控制的。因此要连接 SQL Server 2014,首先要经过身份验证,要通过身份验证,就必须拥有登录ID 。新建用户: ceshi图 20 建立新用户分配选择 goods 表权限给用户ceshi: grant select on goods to ceshi;图 21 分配 select 权限分配插入删除权限给ceshi : grant insert and delete on plaza to ceshi;使用 sql server图 22 分配 insert delete登陆验证方式登陆ceshi权限,展开数据库,只有goods表 和plaza表,图 23 ceshi 用户所有表收回 ceshi 用户所有的权限: Revoke all on goods from ceshi Revoke all on plaza from ceshi图 24 回收所有的权限3 )了解 SQLSERVER的存储过程、触发器、函数实现过程通过查看 SQLSERVER的联机帮助文档和示例, 体会存储过程、 函数和触发器的原理, 尝试编制具备基本功能的存储过程、触发器和函数的实际例子,查看其执行效果。创建一个存储过程,其中包含插入和删除操作,经验证存储结果,过程生效。CreateProcedureMyProcedureASBeginSetNOCOUNTON;Set XACT_ABORTON;BeginTranDeletefromgoodsInsertintoplazaCommit Tranwhere gname=anta;values ( 校园超市 , 武广 );End创建一个级联删除触发器,使得在sale中删除一个货物时删除goods表中同种货物。createtriggerChang_Update_saleon dbo. salefordeletedeletegoodsfrom goods , salewhere =;图 25 级联删除结果 1图 26 级联删除结果 2创建一个函数选择goods 表所有内容 ;SET ANSI_NULLSONGOSET QUOTED_IDENTIFIERONGO- =- Author:- Create date: - Description:- =CREATEFUNCTIONtypoints()RETURNSTABLEASRETURN(SELECT* from goods);Select选择该函数,由于是表值函数所以用select * fromdbo.typoints()择 goods 表内容, 有结果可以看出,该函数执行成功。与直接执行函数体的结果是一样的。调用,选SELECT* from goods图 27函数执行结果三、实验总结1)实验问题及解决1、由于安装的是较新版的数据库(sql server2014)使得有些语句与书上不符,比如建触发器语句: create triggerdbo. Chang_Update_saleon dbo. saleafterinsertasif ( selectcount (*) from sale , insertedwhere =antaand 350)= 1beginupdate saleset=350where =antaand = 家乐福 end书上有 before语句, 2014 版中不支持 before 语句但有 insteadof语句,同时也不支持or 连接两个操作的说明,还是要查找一些资料才能理解语句的内涵。才能知道虽然变了部分语法,但是还是换汤不换药的方式。2、建立视图是,总是建立失败,第一次未能插入到新视图里,第二次是想直接建立一个平均后的视图,经过多次尝试失败,还使用了group 语句去完善自己的视图,虽然实验简单,但是同样体会到数据库的重要性,同样操作不容马虎,不能有一点一点的失误。3、所学标准语句与实际所用的数据库产品标准的差异问题。虽然很多时候核心的语句是一致的,但是有一些地方不一样。比如grant 时,标准语句需要在表明前加上table ,但是在使用 SQLServer2014时,发现语句有问题,和同学讨论了很久,改了很多关键字都不起效,后来在网上找到实际的grant 语句,进行仔细地比较才发现在 SQLServer2014里面是不需要“table ”这个关键字的。4、 创建外码的问题;一开始,随手就先创建sale 关系,然后创建goods 关系。但是后来发现, 由于 sale 关系用到了 goods关系的外码而无法实现。 所以提示创建失败。最后,只好先创建 goods关系。这应该是一个教训,在创建有交互关系的时候,需要判断谁先创建,避免不必要的错误2)实验心得通过这次数据库实验(虽然没来的检查)发现很多的书上的知识用到实践中会出现各种各样的错误,也告诉我们实践是检验知识的唯一真理。总的来说,受益匪浅。在这些天中,我们学到了很多东西,包括建表,导入数据,查询,插入。没接触的时候总是觉得它比较深奥或是不可接近的新型语言,尽管自己对C 语言非常熟悉, 但还是有些心理上的陌生感。学习数据库就和我们平时的其它科目学习一样感觉它有永无止境的知识。我认识它是从我接触实验运作开始的,刚开始就是建立数据库,两种验证模式,没什么东西但还觉得不错。进而就是操作语言了,紧接着就是触发器的使用,进而对数据库高级的使用,等等。学了这门课以后发现和我想的基本是一样的,老师对学生也比较和蔼可亲, 对我们要求也不是很紧。 让每个人都觉得轻轻松松就能把这门课程学完,没有多么紧张的作业,也没有太苛刻的要求。学习 SQL Sever 数据库后感觉可分两大块,一块是开发, 一块是管理。开发主要是写写存储过程、触发器什么的,还有就是用Oracle的 Develop 工具做 form 。开发还需要有较强的逻辑思维和创造能力,自己没有真正做过。管理则需要对SQLSever 数据库的原理有深刻的认识, 有全局操纵的能力和紧密的思维,责任较大, 因为一个小的失误就会弄掉整个数据库,相对前者来说, 后者更看重经验。这些东西都是从老师哪里和朋友的讨论中得到的心得, 也希望其他朋友能多多向老师和朋友请教, 如果是个人单独靠自己来完成一个完美的数据库我觉得比较困难, 现在基本上都是团队类型的, 而且他们的效率高开发的周期也快。SQLServer 数据库的实验学习使我对数据库的有了新的进步,以后再看到也就不至于什么也不懂,其实那么多数据库我觉得学好一门就行,只是他们的语言可能不大一样,学好一门后就可去认识其它的,这样应该有事半功倍的效果。因此,我感谢数据库老师给了我有用的知识, 以便我在以后学习或认识更多的内容能有新的方法和思维,也能更加有效和快速的去消化吸收新的东西。希望在今后中,SQLServer 能给我更多帮助。感谢学校开设这样一门优秀使用的课程,让我对数据库有了更深的了解
展开阅读全文