SQLServer2014数据库应用与开发教程第四版卫琳课后参考答案_第1页
SQLServer2014数据库应用与开发教程第四版卫琳课后参考答案_第2页
SQLServer2014数据库应用与开发教程第四版卫琳课后参考答案_第3页
SQLServer2014数据库应用与开发教程第四版卫琳课后参考答案_第4页
SQLServer2014数据库应用与开发教程第四版卫琳课后参考答案_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1章习题参考答案1. SQLServer2014的常用版本有哪些?应用范围分别是什么?答:SQLServer2014提供了如下版本供不同应用进行选择:(1)企业版Enterprise(64位和32位):作为高级版本,SQLServer2014Enterprise版提供了全面的高端数据中心功能,性能极为快捷、虚拟化不受限制,还具有端到端的商业智能,可为关键任务工作负荷提供较高服务级别,支持最终用户访问深层数据。(2)商业智能版BusinessIntelligence(64位和32位):SQLServer2014BusinessIntelligence版提供了综合性平台,可支持组织构建和部署安全、可扩展且易于管理的BI解决方案。它提供了基于浏览器的数据浏览与可见性等卓越功能、功能强大的数据集成功能,以及增强的集成管理。(3)标准版Standard(64位和32位):SQLServer2014Standard版提供了基本数据管理和商业智能数据库,使部门和小型组织能够顺利运行其应用程序并支持将常用开发工具用于内部部署和云部署,有助于以最少的IT资源获得高效的数据库管理。(4)Web版(64位和32位):对于为从小规模至大规模Web资产提供可伸缩性、经济性和可管理性的Web宿主和WebVAP来说,SQLServer2014Web版本是一项总拥有成本较低的选择。(5)开发版Developer(64位和32位):SQLServer2014Developer版支持开发人员基于SQLServer构建任意类型的应用程序。它包括Enterprise版的所有功能,但有许可限制,只能用作开发和测试系统,而不能用作生产服务器。SQLServerDeveloper是构建和测试应用程序的开发人员的理想之选。(6)简易版Express版(64位和32位):SQLServer2014Express是入门级的免费数据库,是学习和构建桌面及小型服务器数据驱动应用程序的理想选择。它是独立软件供应商、开发人员和热衷于构建客户端应用程序的人员的最佳选择。如果以后需要使用更高级的数据库功能,则可以将SQLServerExpress无缝升级到其他更高端的SQLServer版本。SQLServer2014中新增了SQLServerExpressLocalDB,这是Express的一种轻型版本,该版本具备所有可编程性功能,但在用户模式下运行,并且具有快速的零配置安装和必备组件要求较少等特点。2. SQLServer2014的优势是什么?答:(1)处理关键任务的性能提升。SQLServer2014新增内存联机事务处理(OnlineTransactionProcessing,OLTP)功能,使其在不修改应用程序的情况下提升性能。除此之外,可更新的列存储索以及AlwaysOn功能的增强也让SQLServer2014的较以往的版本处理能力大大增强。(2)获得深度信息速度加快。借助于新的基于Office的商业智能(BusinessIntelligence,BI)工具(如PowerQuery和PowerMap),使用户能够随时随地访问数据。除此之外,企业选项(如ParallelDataWarehousewithPolybase)让集团组织借助商业智能工具,对于大数据进行分析探索,得到对于自己数据的全新的深入见解。(3)混合平台操作。不论处理环境是纯本地的、虚拟化的还是完全在云中的,SQLServer2014都提供了对应的选项。新增功能(如MicrosoftSQLServerBackuptoWindowsAzureTool)允许备份到WindowsAzureBlob存储,并且可以对本地或云中保存的数据备份进行压缩或加密。3. SQLServer2014是由哪几个服务组成的?答:MicrosoftSQLServer2014系统由4部分组成,这4个部分被称为4个服务,分别是数据库引擎、AnalysisServices、ReportingServices和IntegrationServices第2章习题参考答案1.简答题(1)SQLServer2014的系统安装一共提供了几种不同的安装模式?答:安装模式一共分五种:全新安装、并列安装、省级安装、手动安装、自动安装。SQLServer2014的系统安装的硬件选择的最低要求有哪些?答:SQLServer2014的系统安装的硬件选择的最低要求如下表所示:硬件需求处理器64位安装速度:1.4GHz或更高AMDOpteron、Athlon64、支持IntelEM64T的IntelPentiumIV、支持IntelEM64T的Xeon注意虽然联机丛书描述了32位安装的需求,但是实际安装时会发生错误,指出不支持32位安装内存1GB(Express版为512MB);推荐4GB存储器数据库引擎和数据文件、复制、全文搜索以及数据质量服务:811MBAnalysisServices和数据文件:345MBReportingServices和报表管理器:304MBIntegrationServices:591MB主数据服务:243MB客户端组件(除了SQLServer联机丛书组件和IntegrationServices工具以外):1823MB用于查看和管理帮助内容的SQLServer联机丛书组件:375KB(3)SQLServer2014安装过程中有哪几个重要的配置选项?答:主要有这样四个配置选项:1.排序规则、2.区分大小写、3.排序顺序、4.服务账户。SQLServer2014最重要的性能设置包括哪些方面?答:包括三方面:1.内存、2.网络数据包大小、3.即时文件初始化。第3章习题参考答案1.简答题(1)SQLServer2014的系统数据库有哪几种?功能分别是什么?答:系统数据库由master、model、msdb、tempdb和隐藏的Resource数据库组成。master数据库:master数据库是SQLServer2014中最重要的数据库,用于记录SQLSever2014中所有服务器级别的对象。包括了服务器登录账户、链接服务器定义以及端点。Master数据库同时还记录服务器上其他所有数据库的信息。model数据库:model数据库是一个模板数据库。该数据库存储了可以作为模板的数据库对象和数据。msdb数据库:msdb数据库是与SQLSever2014代理服务有关的数据库。该系统数据库记录有关警报、操作员、调度信息等,这些信息可以用于自动化系统的操作。Tempdb数据库:tempdb数据库是一个临时数据库,可用于存储查询过程中所使用的中间数据和结果。Resource系统数据库:Resource系统数据库是一个被隐藏的、只读的、物理的系统数据库,包含了SQLServer2014实例使用的所有系统对象。数据库的存储结构分为哪两类?答:数据库的存储结构分为逻辑存储结构和物理存储结构两种。数据库的物理存储结构是指保存数据库中各种逻辑对象的物理文件是如何在磁盘上存储的,数据库在磁盘上是以文件位单位存储的,SQLSever2014将数据库映射为一组操作系统文件。数据库的逻辑存储结构是指组成数据库的所有逻辑对象。SQLSever2014的逻辑对象包括数据表、视图、存储过程、函数、触发器、规则,另外还有用户、角色、架构等。数据库由哪几种类型的文件组成?其扩展名分别是什么?答:SQLSever2014中数据库在磁盘上存储时主要分为两大类物理文件:数据库文件和事务日志文件。一个数据库至少包含一个数据文件和一个日志文件。数据文件又分为主数据文件和辅助数据文件。主数据文件:主数据文件包含数据库的启动信息,其用来存储部分或者全部数据。用户数据和对象可以存储在此文件中,也可以存储在辅助数据文件中。每个数据库必须有且仅能有一个主文件,默认扩展名为.mdf。辅助数据文件:一个数据库可以没有辅助数据文件,也可能有多个辅助数据文件,辅助数据文件是可选的,其由用户定义并存储未包括在主文件内的用户数据。当数据库超过了单个Windows文件的最大大小时,可以使用辅助数据文件,从而使数据库能继续增长。而当数据库较小时,则只创建主数据文件就可以,不需要再创建辅助数据文件。辅助数据文件的默认扩展名为.ndf。事务日志文件:事务日志文件是由一系列日志记录组成,用来记录数据库更新情况的文件。事务日志文件用于保存恢复数据库所需的事务日志信息。每个数据库必须至少有一个事务日志文件,也可能有多个事务日志文件。事务日志文件的建议扩展名为.ldf。数据库、数据库系统与数据库管理系统的区别是什么?答:数据库是以一定的组织形式存放在计算机中的相关数据的集合。数据库系统是指在计算机系统中引入数据库后的一个完整的应用系统。包括数据库、数据库管理系统、应用程序以及用户等。在大型数据库系统中,还专门设有数据库管理员。数据库管理系统是指帮助用户建立、使用和管理数据库的计算机软件。其功能包括数据定义、数据操作、数据库及数据库维护等。SQLServer2014常用的系统数据类型有哪些?答:整型、浮点型、字符型、日期时间型、位数据类型、货币数据类型、二进制数据类型。2.上机操作题(1)使用SQLServer2014管理控制台的图形界面以及T-SQL语句分别创建“学生管理库”数据库和删除数据库。要求“学生管理库”数据库的主数据文件的初始大小为5MB,最大为50MB,增长方式为10%;日志文件的初始大小为1MB,最大为5MB,增长方式为1MB。T-SQL语句如下:(name=’学生管理库’,filename=’e:\学生管理库.mdf’,size=5MB,maxsize=50MB,filegrowth=10%)Logon(name=’学生管理库’,filename=’e:\学生管理库_log.ldf’,size=1MB,maxsize=5MB,filegrowth=1MB)Go(2)分别创建“学生”、“选课”、“课程”数据表。(3)向“学生”、“选课”、“课程”数据表中分别输入若干条记录。(4)删除“学生”、“选课”、“课程”数据表。第4章习题参考答案1.计算“2012-5-16”与当前日期相差的年份数。答:selectdatediff(y,’2012-5-16’,getdate())2.声明一个长度为20的字符型变量,并赋值为“SQLServer数据库”,然后输出。答:declare@cchar(20)set@c=’SQLServer数据库’print@c3.定义一个局部变量@score,并为其赋值,判断其是否及格。答:declare@scorefloatset@score=85if@score>=60 print‘及格’else print‘不及格’4.使用Transact-SQL语句编程求100以内能被3整除的整数的个数。答:declare@nint,@countintselect@n=1,@count=0while@n<=100 begin if@n%3==0 set@count=@count+1 set@n=@n+1 endprint‘100以内能被3整除的整数的个数=’+convert(char,@count)go 第5章习题参考答案回到工作场景,完成工作场景中提出的查询要求。略简述SELECT语句的基本语法。SELECT语句的完整语法格式如下:SELECT<列名选项>FROM<表名>|<视图名称>[WHERE<查询条件>|<联接条件>][GROUPBY<分组表达式>[HAVING<分组统计表达式>]][ORDERBY<排序表达式>[ASC|DESC]]作用。SELECT子句:用来指定查询返回的列,各列在SELECT子句中的顺序决定了它们在结果表中的顺序;FROM子句:用来指定数据来源的表或视图;WHERE子句:用来限定返回行的搜索条件;GROUPBY子句:用来指定查询结果的分组条件;ORDERBY子句:用来指定结果的排序方式。简述WHERE子句可以使用的搜索条件及其意义。常用的查询条件如下表:查询条件运算符说明比较=、>、<、>=、<=、!=、<>、!>、NOT+上述运算符比较大小逻辑运算AND、OR、NOT用于逻辑运算符判断,也可用于多重条件的判断字符匹配LIKE、NOTLIKE判断值是否与指定的字符通配格式相符确定范围BETWEEN…AND…、NOTBETWEEN…AND…判断值是否在范围内确定集合IN、NOTIN判断值是否为列表中的值空值ISNULL、ISNOTNULL判断值是否为空举例说明什么是内连接、外连接和交叉连接?交叉连接也称非限制连接,又叫广义笛卡尔积。两个表的广义笛卡尔积是两表中记录的交叉乘积,结果集的列为两个表属性列的和,其连接的结果会产生一些没有意义的记录,而且进行该操作非常耗时。因此该运算的实际意义不大。交叉连接会产生很多冗余的记录,那么如何筛选出有用的连接呢?通过内连接来实现,内连接也称为简单连接,它会把两个或多个表进行连接,只查出匹配的记录,不匹配的记录将无法查询出来。这种连接查询是平常用的最多的查询。内连接中常用的就是等值连接和非等值连接。等值连接的连接条件是在WHERE子句中给出的,只有满足连接条件的行才会出现在查询结果中。这种形式也称为连接谓词表示形式,是SQL语言早期的连接形式。当连接条件中的关系运算符使用除“=”以外的其他关系运算符时,这样的内连接称为非等值连接。外连接是指连接关键字JOIN的后面表中指定列连接在前一表中指定列的左边或者右边,如果两表中指定列没有匹配行,则返回空值。外连接的结果不但包含满足连接条件的行,还包含相应表中的所有行。外连接有三种形式,其中的OUTER关键字可以省略:(1)左外连接(LEFTOUTERJOIN或LEFTJOIN):包含左边表的全部行(不管右类似于这样的自身连接在实际应用中还有很多,例如,求与“赵权”同职称的老师等。边的表中是否存在与它们匹配的行),以及右边表中全部满足条件的行。(2)右外连接(RIGHTOUTERJOIN或RIGHTJOIN):包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边表中全部满足条件的行。6.INSERT语句的VALUES子句中必须指明哪些信息,必须满足哪些要求?INSERT语句格式为:INSERTINTO表名[(列名1,…)]VALUES(列值1,…)在插入数据时,表明后面的列名不能为空,并且VALUES后面的列值须和列名一一对应;在使用语句整体插入数据时,须根据数据库里的所有字段按顺序填写对应字段。7.使用教学管理数据库,进行如下操作:(1)查询所有课程的课程名和课程号;SELECT课程名,课程号FROM课程(2)查询所有考试不及格的学生的学号、姓名和分数;SELECT学号,姓名,分数FROM学生,选课WHERE选课.成绩<60AND学生.学号=选课.学号(3)查询年龄在18-20岁之间的学生姓名、年龄、所属院系和政治面貌;SELECT学号,年龄,系别,政治面貌FROM学生WHERE年龄BETWEEN18AND20(4)查询所有姓李的学生的学号、姓名和性别;SELECT学号,年龄,系别,政治面貌FROM学生WHERE姓名LIKE‘李%’(5)查询名字中第2个字为“华”字的女学生的姓名、年龄和所属院系;SELECT姓名,年龄,系别FROM学生WHERE年龄姓名LIKE‘_华%’(6)查询所有选了3门课以上的学生的学号、姓名、所选课程名称及分数;SELECT学生.学号,课程号,姓名,分数FROM学生,课程,选课WHERE学生.学号=选课.学号AND课程.课程号=选课.课程号GROUPBY学生.学号HAVINGCOUNT(*)>=3(7)查询每个同学各门课程的平均分数和最高分数,按照降序排列输出学生姓名、平均分数和最高分数;SELECT姓名,AVG(分数),MAX(分数)FROM学生,选课WHERE学生.学号=选课.学号ORDERBYAVG(分数)DESC(8)查询所有学生都选修了的课程号和课程名。SELECT课程号,课程名FROM课程WHERENOTEXISTS(SELECT*FROM学生WHERENOTEXISTS(SELECT*FROM选课WHERE学号=学生.学号AND课程号=课程.课程号)第6章习题参考答案1.使用T-SQL语句管理表的数据,插入语句,修改语句,删除语句分别是什么?答:插入语句是:INSERT[INTO]<table_name>(column_name1,column_name2…,column_namen)VALUES(values1,values2,…,valuesn)修改语句是:UPDATEtable_nameSETcolumn_1=expression_1,column_2=expression_2,…,column_n=expression_n[WHEREsearch_conditions]删除语句是:DELETEFROMtable_name[WHEREsearch_conditions]2.向表中插入数据一共有几种方法?答:(1)插入简单记录值行(2)插入多行记录值(3)利用SELECT插入查询结果集(4)利用BULKINSERT语句进行大批量插入数据3.删除表中的数据可以使用哪几种语句?有什么区别?答:删除表中的数据可以使用DELETE语句、TRUNCATETABLE语句以及DROPTABLE语句。使用TRUNCATETABLE语句比DELETE语句要快,因为它是逐页删除表中的内容,而DELETE则是逐行删除内容。TRUNCATETABLE是不记录日志的操作,它将释放表的数据和索引所占据的所有空间以及所有为全部索引分配的页,删除的数据是不可恢复的。而DELETE语句则不同,它在删除每一行记录时都要把删除操作记录在日志中。删除操作记录在日志中,可以通过事务回滚来恢复删除的数据。用TRUNCATETABLE和DELETE语句都可以删除所有的记录,但是表结构还在,而DROPTABLE不但删除表中的数据,而且还删除表的结构并释放空间。第7章习题参考答案1.唯一约束和主键约束的区别是什么?答:RPRIMAYKEY约束与UNIQUE约束的区别如下:(1)一个表中只能有一个RPRIMAYKEY约束,但可以有多个UNIQUE约束。(2)UNIQUE约束所在的列允许空值,只能出现一个空值,但是RPRIMAYKEY约束所在的列不允许空值。(3)在默认情况下,RPRIMAYKEY约束强制在指定的列上创建一个唯一性的聚集索引;UNIQUE约束强制在指定的列上创建一个唯一性的非聚集索引。2.规则对象与CHECK约束有什么区别?答:CHECK约束比规则更简明,一个列只能应用一个规则,但是却可以应用多个CHECK约束。CHECK约束可作为CREATETABLE语句的一部分进行指定,而规则以单独的对象创建,然后绑定到列上。3.什么是数据库的完整性?完整性有哪些类型?答:数据完整性(DataIntegrity)指的是存储在数据库中的所有数据值均为正确合理的状态。如果数据库中含有不正确的数据值,则该数据库被称为丧失数据完整性。数据完整性分为4个类别:实体完整性(Entityintegrity),域完整性(Domainintegrity),引用完整性(Referentialintegrity),用户定义完整性(User-definedintegrity)。4.创建一个“职工”数据表,包含职工号char(6)、姓名nvarchar(4)、性别nchar(1)、部门nvarchar(10)字段。设置“职工号”为主键、“姓名”字段设置唯一约束、“性别”字段设置为只能取值“男”或“女”、“部门”字段设置默认值为“销售处”。答:CREATETABLE职工(职工号char(6)primarykey,姓名nvarchar(4)unique,性别nchar(1),部门nvarchar(10))CREATERULEsex_ruleAS@性别in(‘男’,‘女’)CREATERULEdepartment_defaultAS‘销售处’ExecSp_bindrule‘sex_rule’,‘职工.性别’ExecSp_bindefault‘department_default’,‘职工.部门’第8章习题参考答案1.简答题(1)本章介绍了哪几种索引,分别描述每种索引的主要特征。答:1.基于行的索引基于行的(或行存储)索引是传统的索引,将数据存储为数据页中的行。这些索引包括聚集索引和非聚集索引。1)聚集索引聚集索引基于键列存储和排序表的叶级数据。实际的存储页链接在一起,所以可以按照聚集键的顺序依次读取表,导致的I/O开销极小。每个表只可以有一个聚集索引,因为只可以按照一种顺序排序数据,而且聚集索引代表了实际的表数据。2)非聚集索引非聚集索引包含索引键值和行定位器,行定位器指向实际的数据行。如果没有聚集索引,行定位器就是实际数据行的RowID指针。如果存在聚集索引,行定位器就是该行的聚集索引键。3)覆盖索引覆盖索引是满足(覆盖)特定查询的所有字段需求的索引。通过在CREATEINDEX语句中使用INCLUDE短语,非聚集索引在叶级可以包含非键列,以帮助覆盖查询。这些索引类型可以改进查询性能,并减少I/O操作,因为满足查询所需要的列作为键列或非键列包括在索引自身中,不需要再读取实际的数据行。4)过滤索引过滤索引使用WHERE子句指示将要索引哪些行。因为只是索引表中的部分行,所以可以创建较小的数据集存储到索引中。过滤索引总是非聚集索引,因为它们选择总记录集的一个子集,而总记录集用表上的聚集索引表示。如果查询的WHERE子句可用过滤索引的WHERE子句中的行满足,那么就会在查询计划中选择过滤索引。2.基于列的索引基于列的索引是在单独列上创建的索引。基于列的索引有两种主要类型:列存储索引(SQLServer2012中首次引入)和XML索引(提供了XML列中的值的索引)。列存储索引列存储索引在SQLServer2012中首次引入。在这种基于列的索引中,为每个列创建行值的一个索引,然后所有的索引连接起来,表示表的基本数据存储。这些索引基于Vertipaq引擎实现,该引擎实现能够实现高压缩比,处理大型数据集。3.内存优化索引SQLServer2014创建了新的索引来支持内存优化表。散列索引保存在内存中,用于访问内存优化(Hekaton)表中的数据。所需要的内存量与散列索引使用的桶计数有关。内存优化的非聚集索引将对从内存优化表中访问的数据进行排序。这些索引只能使用CREATETABLE和CREATEINDEX语句创建,并且是为范围排序扫描(按照排序顺序读取大量数据)创建的。当内存表加载到内存中时会创建这些索引,它们不会被持久化到物理表。4.其他索引类型SQLServer中还有其他一些类型的索引,用于支持具体的开发主题。本节将介绍这些类型的基本知识,要详细了解这些索引,请阅读联机丛书中的“索引”小节。1)XML索引XML索引是一种特殊的索引类型,用于索引存储在XML列中的值。这些索引拆分XML列并存储详细信息,供在SQL查询中快速检索。XML列可能很大,在运行时将XML数据拆分成可读的数据元素会减缓大型XML查询。通过使用XML索引,这种拆分是提前完成的,在运行时读取很快。2)全文索引创建全文索引是为了支持SQLServer中的全文搜索功能。全文索引让用户和应用程序能够在SQLServer表中查询基于字符的数据。必须先在表上创建全文索引,然后才能在全文搜索中包含它。3)空间索引空间索引对空间数据列进行索引。空间数据列包含GEOMETRY或GEOGRAPHY类型的值。空间索引支持处理空间数据的操作,如内置的地理方法(STContains()、STDistance()、STEquals()、STIntersects()等)。为了让优化器能够选择查询,必须在查询的JOIN或WHERE子句中使用这些方法。索引数据库的重要组成部分包括哪些?答:索引数据库的重要组成部分包括创建分区和索引,以及高级的索引技术,如过滤索引和覆盖索引。重新组织和重新构建索引的区别是什么?答:列存储索引在SQLServer2012中首次引入。在这种基于列的索引中,为每个列创建行值的一个索引,然后所有的索引连接起来,表示表的基本数据存储。这些索引基于Vertipaq引擎实现,该引擎实现能够实现高压缩比,处理大型数据集。在SQLServer2012中,这些索引是不可更新的——要在索引中添加值,就需要重新构建索引。聚集索引和其他索引有什么本质区别?答:1.聚集索引和非聚集索引的根本区别是表记录的排列顺序和与索引的排列顺序是否一致,聚集索引表记录的排列顺序与索引的排列顺序一致,优点是查询速度快,因为一旦具有第一个索引值的纪录被找到,具有连续索引值的记录也一定物理的紧跟其后。

2.聚集索引的缺点是对表进行修改速度较慢,这是为了保持表中的记录的物理顺序与索引的顺序一致,而把记录插入到数据页的相应位置,必须在数据页中进行数据重排,

降低了执行速度。非聚集索引指定了表中记录的逻辑顺序,但记录的物理顺序和索引的顺序不一致,聚集索引和非聚集索引都采用了B+树的结构,但非聚集索引的叶子层并不与实际的。第9章习题参考答案1.什么是事务?简述事务ACID原则的含义。答:事务是由一组SQL语句组成的逻辑处理单元,事务具有以下4个属性,通常简称为事务的ACID属性。

ACID是Atomic(原子性)、Consistency(一致性)、Isolation(隔离性)、Durability(持久性)的英文缩写。

Atomic(原子性):指整个数据库事务是不可分割的工作单位。只有使据库中所有的操作执行成功,才算整个事务成功;事务中任何一个SQL语句执行失败,那么已经执行成功的SQL语句也必须撤销,数据库状态应该退回到执行事务前的状态。

Consistency(一致性):指数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。例如对银行转帐事务,不管事务成功还是失败,应该保证事务结束后ACCOUNTS表中Tom和Jack的存款总额为2000元。

Isolation(隔离性):指的是在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。

Durability(持久性):指的是只要事务成功结束,它对数据库所做的更新就必须永久保存下来。即使发生系统崩溃,重新启动数据库系统后,数据库还能恢复到事务成功结束时的状态。为什么要使用锁?SQLServer2014提供了哪几种锁的模式。答:数据库锁的产生原因:数据库和操作系统一样,是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。加锁是实现数据库并发控制的一个非常重要的技术。在实际应用中经常会遇到的与锁相关的异常情况,当两个事务需要一组有冲突的锁,而不能将事务继续下去的话,就会出现死锁,严重影响应用的正常执行。

在数据库中有两种基本的锁类型:排它锁(ExclusiveLocks,即X锁)和共享锁(ShareLocks,即S锁)。当数据对象被加上排它锁时,其他的事务不能对它读取和修改。加了共享锁的数据对象可以被其他事务读取,但不能修改。数据库利用这两种基本的锁类型来对数据库的事务进行并发控制。什么是死锁?怎么预防死锁?怎么解决死锁?答:当事务T1封锁了数据R1,T2封锁了数据R2,然后T1又请求封锁数据R2,因T2封锁了数据R2于是T1等待T2释放数据R2上的锁,接着T2又申请封锁数据R1,因为T1封锁了数据R1,T2也只能等待T1释放数据R1上的锁.这样就出现了T1等待T2而T2又在等待T1的局面,T2和T1两个事物永远不能结束,形成死锁。产生死锁的原因主要是:

(1)因为系统资源不足。

(2)进程运行推进的顺序不合适。

(3)资源分配不当等。

如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。

产生死锁的四个必要条件:

(1)互斥条件:一个资源每次只能被一个进程使用。

(2)请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。

(3)不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。

(4)循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。

死锁的解除与预防:

理解了死锁的原因,尤其是产生死锁的四个必要条件,就可以最大可能地避免、预防和解除死锁。所以,在系统设计、进程调度等方面注意如何不让这四个必要条件成立,如何确定资源的合理分配算法,避免进程永久占据系统资源。此外,也要防止进程在处于等待状态的情况下占用资源。因此,对资源的分配要给予合理的规划。试说明使用游标的步骤和方法。答:游标(cursor)是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果。每个游标区都有一个名字,用户可以用SQL语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理。游标提供了一种对从表中检索出的数据进行操作的灵活手段。

使用游标的基本步骤:

1、声明游标。把游标与T-SQL语句的结果集联系起来。

2、打开游标。

3、使用游标操作数据。

4、关闭游标。第10章习题参考答案1.试说明存储过程的特点及分类。答:存储过程(StoredProcedure)是在大型\t"/item/%E5%AD%98%E5%82%A8%E8%BF%87%E7%A8%8B/_blank"数据库系统中,一组为了完成特定功能的SQL语句集,存储在数据库中,经过第一次编译后调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。存储过程可以分三大类:系统存储过程:用来管理SQLserver和现实有关数据库和用户信息的存储过程过程开头SP_开头,存放在master

数据库中扩展存储过程:使用其他变成语言创建外部存储过程,并将这个存储过程在SQLserver中作为存储过程来使用。XP_开头自定义存储过程:用户在SQLserver

中通过采用SQL语句创建的存储过程,通常已USP_开头。创建一个存储过程,显示所有价格在15美元以下的书的书名,类型,价格。答:CREATEPROCEDUREshow_titleASSELECTtitle,type,priceFROMtitlesWHEREprice<15GOEXECshow_title把价格作为参数,创建一个能显示在某两个指定价格之间的书的书名,类型,价格。答:CREATEPROCEDUREshow_title2@price1money,@price2moneyASSELECTtitle,type,priceFROMtitlesWHEREpricebetween@price1and@price2GOshow_title212,20使用OUTPUT参数,创建一个计算圆柱体体积的存储过程。并执行它。答:CREATEPROCEDUREcomp_area@rsmallint,@hsmallint,@resultdecimal(10,2)OUTPUTASSET@result=PI()*SQUARE(@r)*@hGODECLARE@answerdecimal(10,2)EXECUTEcomp_area2,3,@answerOUTPUTSELECT'Theresultis:',@answerA)建立price_change表,准备用来存放书的价格变化信息,有以下几列:title_id,type,old_price,new_price,change_date,operator。建立一个更新触发器,一旦titles表发生更新,立即把相关信息存放到price_change表中。答:createtableprice_change(title_idvarchar(20),typevarchar(20),old_pricemoney,new_pricemoney,change_datedatetime,operatorvarchar(20))gocreatetriggertri_priceontitlesforupdateasinsertintoprice_changeselecto.title_id,o.type,o.price,n.price,getdate(),user_name()fromdeletedoJOINinsertednONo.title_id=n.title_idgoupdatetitlessetprice=price*1.1修改习题5,使得只有当price列被更新时,才会触发触发器。答:createtriggertri_priceontitlesforupdateasifupdate(price)begininsertintoprice_changeselecto.title_id,o.type,o.price,n.price,getdate(),user_name()fromdeletedoJOINinsertednONo.title_id=n.title_idendgo7.创建一个存放书的编号、书名、类型、价格、对应作者的编号、姓名、电话、住址的视图。为这个视图创建一个Insteadof更新触发器,把对视图的更新放到触发器里面来做。(假设,我们只允许更新这个视图的某几个列:price,phone,address)。添加测试数据。更新v_titledetail,把书编号为‘LI1234’的书的价格改为200,该书作者的电话该为‘02512345678’usepubsgocreateviewv_titledetailasselectt.title_id,title,type,price,a.au_id,au_lname,au_fname,phone,addressfromtitlest,titleauthorta,authorsawheret.title_id=ta.title_idandta.au_id=a.au_idcreatetriggertri_titledetailonv_titledetailinsteadofupdateasdeclare@pricemoney,@phonevarchar(20),@addressvarchar(40),@title_idvarchar(20),@au_idvarchar(20)select@title_id=title_id,@price=price,@au_id=au_id,@phone=phone,@address=addressfrominsertedupdatetitlessetprice=@pricewheretitle_id=@title_idupdateauthorssetphone=@phone,address=@addresswhereau_id=@au_idGoupdatev_titledetailsetprice=200,phone='025123445678'wheretitle_id='LI1234'习题参考答案1.填空题(1)虚表,定义;(2)视图分为3种:标准视图、索引视图和分区视图;(3)创建视图使用的T-SQL语句是createview;修改视图使用的T-SQL语句是alterview;删除视图使用的T-SQL语句是dropview。2.简答题(1)视图的作用是什么?答:视图主要有以下作用:视图能够简化用户的操作;视图使用户能以多种角度看待同一数据;视图对重构数据库提供了一定程度的逻辑独立性;视图能够对机密数据提供安全保护;适当使用视图可以更清晰地表达查询。视图和基本表的主要区别和联系是什么?答:视图:在SQL中,视图是外模式一级数据结构的基本单位。它是从一个或几个基本表中导出的表,是从现有基本表中抽取若干子集组成用户的“专用表”。

基本表:基本表的定义指建立基本关系模式,而变更则是指对数据库中已存在的基本表进行删除与修改。

二者的区别:1、视图是已经编译好的sql语句。而表不是

2、视图没有实际的物理记录。而表有。

3、表是内容,视图是窗口

4、表只用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时四对它进行修改,但视图只能有创建的语句来修改

5、表是内模式,试图是外模式

6、视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全的角度说,视图可以不给用户接触数据表,从而不知道表结构。

7、表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表。

8、视图的建立和删除只影响视图本身,不影响对应的基本表。

联系:视图(view)是在基本表之上建立的表,它的结构(即所定义的列)和内容(即所有数据行)都来自基本表,它依据基本表存在而存在。一个视图可以对应一个基本表,也可以对应多个基本表。视图是基本表的抽象和在逻辑意义上建立的新关系3.在教学管理数据库中完成如下操作:(1)创建“市场营销”系的学生视图;Createviewv-SHICHANGASSELECT*FROMSTUDENTWHERESDEPT=’市场营销’(2)创建选修“操作系统”课程的学生视图;Createviewv-caozuoAsSelect*FromstudentWheresnoin(selectsnofromscwherecnoin(selectcnofromcoursewherecname=’操作系统’))在上述视图的基础上尝试是否能插入、删除、更新记录。如若不能,请思考原因是什么?答:创建的前一个视图可以进行插入、删除、更新,第二个不行,因为只有行列子集视图才能做这些操作。习题参考答案假如jack晋升为本部门的主管,想要授予jack查询“商品销售”数据库的sales表的权限,如何完成?答:创建一个部门主管的角色:Createrole部门主管给角色授予权限:Grantselectonsalesto部门主管让jack担当这个角色Execsp_addrolemember‘部门主管’,‘jack’假如jack调离本岗位,想要回收jack对sales表的查询权限,如何完成?答:有两种方法,第一种方法,收回查询权限:Revokeselectonsalesfrom部门主管;第二种方法:让JACK不再担当该角色:Execsp_droprolemember‘部门主管’,‘jack’假如jack晋升为本公司的总经理,如何使数据库用户jack拥有该数据库的全部操作权限?答:让jack成为数据库的所有者:Execsp_addrolemember‘db_owner’,’jack’假如用户已经在SQLServer服务器内为Windows组创建了登录账户,为便于组内成员能够访问某数据库下的某些对象,用户还需要做什么?答:首先在某库下创建一个用户,将Windows组登录账户映射到该用户上。然后对该用户授予访问某些对象的权限。5.如何使应用程序角色有效?答:当应用程序角色使用密码被应用程序的会话激活以后,在会话期间,会话就失去了适用于登录、用户账户或所有数据库中的角色的权限,转变为应用程序角色的权限。习题参考答案物理备份设备与逻辑备份设备有什么区别?答:物理备份设备是一个操作系统文件,用路径加上文件名称来标识。例如:f:\testbackup.bak。逻辑备份设备是用户对物理备份设备另外命名的简化名称。简述数据库备份与还原的过程。答:备份就是对数据库中的数据产生副本。通过副本将灾难后的数据进行全部或部分恢复。数据还原就是在数据库的一定生命周期的某一时刻还原数据。作为数据库管理员,应该将数据还原的频率减到最低,预计潜在灾难所能影响到的范围,当灾难发生时,加快还原速度并快速地验证还原是否成功。备份和还原的作用:降低数据丢失的可能性,并能够及时恢复已经丢失的数据,可以在数据库系统中实施备份和恢复策略。SQLServer2014数据库恢复模式分为几种?答:SQLServer2012数据库恢复模式分为三种:完整恢复模式、大容量日志恢复模式、简单恢复模式。如何制定备份与恢复计划?答:为确保数据库系统的安全,应该制定一个完善可行的备份与恢复计划。我们通常根据恢复能力、备份文件的大小及备份时间来确定备份类型。常用备份的方案有只进行安全完整数据库备份;或进行完整数据库备份同时进行事务日志备份;或进行完备份整数据库备份和差异数据库。如何减少备份与恢复操作的执行时间?答:使用多个备份设备同时进行备份处理,同样,可以从多个备份设备同时进行数据库恢复操作。综合使用完全数据库备份、差异备份或事务日志备份来减少每次需要备份的数据量。使用文件或文件组备份以及事务日志备份,可以只备份或恢复那些包含相关数据的文件,而不是整个数据库。6.差异备份作为备份策略的一部分,其优缺点是什么?差异备份是指备份自最近一次完全数据库备份后更新的数据。所以通过差异备份能够节省恢复过程所需的时间。只需要恢复完全备份和最近一次的差异备份,用户就能还原数据库。差异备份不能捕获数据库的更改,所以用户无法利用它从某个即时点来恢复数据库。为了能够执行即时点还原,用户就必须使用事务日志备份。此外,随着最近一次完全数据库备份与差异备份之间的时间不断增加,与先前创建的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论