SQL Server数据库应用与开发教程各章习题参考答案

附录   各章习题参考答案

第1章   习题参考答案

1.  SQL Server 2016的常用版本有哪些?应用范围分别是什么?

答:SQL Server 2016提供了如下版本供不同应用进行选择:

(1)企业版Enterprise(64位和32位)作为高级版本,SQL Server 2016 Enterprise版提

供了全面的高端数据中心功能,性能极为快捷、虚拟化不受限制,还具有端到端的商业智能可为关键任务工作负荷提供较高服务级别,支持最终用户访问深层数据。

(2)商业智能版Business Intelligence(64位和32位):SQL Server 2016 Business Intelligence版提供了综合性平台,可支持组织构建和部署安全、可扩展且易于管理的BI解决方案。它提供基于浏览器的数据浏览与可见性等卓越功能、功能强大的数据集成功能,以及增强的集成管理。

(3)标准版Standard(64位和32位)SQL Server 2016 Standard版提供了基本数据管理和商业智能数据库,使部门和小型组织能够顺利运行其应用程序并支持将常用开发工具用于内部部署和云部署有助于以最少的IT资源获得高效的数据库管理。

(4)Web(64位和32位)对于为从小规模至大规模Web资产提供可伸缩性、经济性和可管理性的Web宿主和Web VAP来说,SQL Server 2016 Web版本是一项总拥有成本较低的选择。

(5)开发版Developer(64位和32位)SQL Server 2016 Developer版支持开发人员基于SQL Server构建任意类型的应用程序。它包括Enterprise版的所有功能,但有许可限制,只能用作开发和测试系统,而不能用作生产服务器。SQL Server Developer是构建和测试应用程序的开发人员的理想之选。

(6)简易版Express版(64位和32位):SQL Server 2016 Express是入门级的免费数据库,是学习和构建桌面及小型服务器数据驱动应用程序的理想选择。它是独立软件供应商、开发人员和热衷于构建客户端应用程序的人员的最佳选择。如果以后需要使用更高级的数据库功能,则可以将SQL Server Express无缝升级到其他更高端的SQL Server版本。SQL Server 2016中新增了SQL Server Express LocalDB,这是Express的一种轻型版本,该版本具备所有可编程性功能,但在用户模式下运行,并且具有快速的零配置安装和必备组件要求较少特点。

2.  SQL Server 2016的优势是什么?

答:(1) 处理关键任务的性能提升。SQL Server 2016新增内存联机事务处理(Online Transaction Processing,OLTP)功能,使其在不修改应用程序的情况下提升性能。除此之外,可更新的列存储索以及AlwaysOn功能的增强也让SQL Server 2016的较以往的版本处理能力大大增强。

(2)获得深度信息速度加快借助于新的基于Office的商业智能(Business Intelligence,BI)工具(如Power Query和Power Map),使用户能够随时随地访问数据。除此之外,企业选项(如Parallel Data Warehouse with Polybase)让集团组织借助商业智能工具,对于大数据进行分析探索,得到对于自己数据的全新的深入见解。

(3)混合平台操作不论处理环境是纯本地的、虚拟化的还是完全在云中的,SQL Server 2016都提供了对应的选项。新增功能(如Microsoft SQL Server Backup to Windows Azure Tool)允许备份到Windows Azure Blob存储,并且可以对本地或云中保存的数据备份进行压缩或加密。

3.  SQL Server 2016是由哪几个服务组成的?

答:Microsoft SQL Server 2016系统由4部分组成,这4个部分被称为4个服务,分别

是数据库引擎、Analysis Services、Reporting Services和Integration Services

第2章   习题参考答案

1. 简答题

(1)  SQL Server 2016的系统安装一共提供了几种不同的安装模式?

答:安装模式一共分五种:全新安装、并列安装、省级安装、手动安装、自动安装。

  1.  SQL Server 2016的系统安装的硬件选择的最低要求有哪些?

答:SQL Server 2016的系统安装的硬件选择的最低要求如下表所示:

硬    件

需    求

处理器

64位安装

速度:1.4GHz或更高

AMD Opteron、Athlon 64、支持Intel EM64T的Intel Pentium IV、支持Intel EM64T的Xeon

注意

虽然联机丛书描述了32位安装的需求,但是实际安装时会发生错误,指出不支持32位安装

内存

1GB(Express版为512MB);推荐4GB

存储器

数据库引擎和数据文件、复制、全文搜索以及数据质量服务:811MB

Analysis Services和数据文件:345MB

Reporting Services和报表管理器:304MB

Integration Services:591MB

主数据服务:243MB

客户端组件(除了SQL Server联机丛书组件和Integration Services工具以外):1823MB

用于查看和管理帮助内容的SQL Server联机丛书组件:375KB

 (3)  SQL Server 2016安装过程中有哪几个重要的配置选项?

答:主要有这样四个配置选项:1. 排序规则、2. 区分大小写、3. 排序顺序、4. 服务账户。

  1.  SQL Server 2016最重要的性能设置包括哪些方面?

答:包括三方面:1.内存、2.网络数据包大小、3.即时文件初始化。

第3章   习题参考答案

1. 简答题

(1) SQL Server 2016的系统数据库有哪几种?功能分别是什么?

答:系统数据库由master、model、msdb、tempdb和隐藏的Resource数据库组成。

master数据库:master数据库是SQL Server 2016中最重要的数据库,用于记录SQL Sever 2014 中所有服务器级别的对象。包括了服务器登录账户、链接服务器定义以及端点。Master数据库同时还记录服务器上其他所有数据库的信息。

model数据库:model数据库是一个模板数据库。该数据库存储了可以作为模板的数据库对象和数据。

msdb数据库:msdb数据库是与SQL Sever 2014代理服务有关的数据库。该系统数据库记录有关警报、操作员、调度信息等,这些信息可以用于自动化系统的操作。

Tempdb数据库:tempdb数据库是一个临时数据库,可用于存储查询过程中所使用的中间数据和结果。

Resource系统数据库:Resource系统数据库是一个被隐藏的、只读的、物理的系统数据库,包含了SQL Server 2016实例使用的所有系统对象。

  1. 数据库的存储结构分为哪两类?

答:数据库的存储结构分为逻辑存储结构和物理存储结构两种。数据库的物理存储结构是指保存数据库中各种逻辑对象的物理文件是如何在磁盘上存储的,数据库在磁盘上是以文件位单位存储的,SQL Sever 2014 将数据库映射为一组操作系统文件。

数据库的逻辑存储结构是指组成数据库的所有逻辑对象。SQL Sever 2014 的逻辑对象包括数据表、视图、存储过程、函数、触发器、规则,另外还有用户、角色、架构等。

  1. 数据库由哪几种类型的文件组成?其扩展名分别是什么?

答:SQL Sever 2014 中数据库在磁盘上存储时主要分为两大类物理文件:数据库文件和事务日志文件。一个数据库至少包含一个数据文件和一个日志文件。数据文件又分为主数据文件和辅助数据文件。

主数据文件:主数据文件包含数据库的启动信息,其用来存储部分或者全部数据。用户数据和对象可以存储在此文件中,也可以存储在辅助数据文件中。每个数据库必须有且仅能有一个主文件,默认扩展名为.mdf。

辅助数据文件:一个数据库可以没有辅助数据文件,也可能有多个辅助数据文件,辅助数据文件是可选的,由用户定义并存储未包括在主文件内的用户数据。数据库超过了单个 Windows 文件的最大大小,可以使用辅助数据文件,从而使数据库能继续增长。而当数据库较小时,则只创建主数据文件就可以,不需要再创建辅助数据文件。辅助数据文件的默认扩展名为.ndf。

事务日志文件:事务日志文件是由一系列日志记录组成,用来记录数据库更新情况的文件。事务日志文件用于保存恢复数据库所需的事务日志信息。每个数据库必须至少有一个事务日志文件,也可能有多个事务日志文件。事务日志文件的建议扩展名.ldf。

  1. 数据库、数据库系统与数据库管理系统的区别是什么?

答:数据库是以一定的组织形式存放在计算机中的相关数据的集合。

数据库系统是指在计算机系统中引入数据库后的一个完整的应用系统。包括数据库、数据库管理系统、应用程序以及用户等。在大型数据库系统中,还专门设有数据库管理员。

数据库管理系统是指帮助用户建立、使用和管理数据库的计算机软件。其功能包括数据定义、数据操作、数据库及数据库维护等。

  1. SQL Server 2016常用的系统数据类型有哪些?

答:整型、浮点型、字符型、日期时间型、位数据类型、货币数据类型、二进制数据类型。

2. 上机操作题

(1) 使用SQL Server 2016 管理控制台的图形界面以及T-SQL语句分别创建“学生管理库”数据库和删除数据库。要求“学生管理库”数据库的主数据文件的初始大小为5MB,最大为50MB,增长方式为10%;日志文件的初始大小为1MB,最大为5MB,增长方式为1MB。

T-SQL语句如下:

    (name=学生管理库,

filename=e:\学生管理库.mdf,

size=5MB,

maxsize=50MB,

filegrowth=10%)

Log on

    (name=学生管理库,

filename=e:\学生管理库_log.ldf,

size=1MB,

maxsize=5MB,

filegrowth=1MB)

Go

(2) 分别创建“学生”、“选课”、“课程”数据表。

(3) 向“学生”、“选课”、“课程”数据表中分别输入若干条记录。

(4) 删除“学生”、“选课”、“课程”数据表。

第4章   习题参考答案

1. 计算“2012-5-16”与当前日期相差的年份数。

答:select datediff(y, 2012-5-16,getdate())

2. 声明一个长度为20的字符型变量,并赋值为“SQL Server数据库”,然后输出。

答:

declare @c char(20)

set @c=SQL Server数据库

print @c

3. 定义一个局部变量@score,并为其赋值,判断其是否及格。

答:

declare @score float

set @score=85

if @score>=60

print 及格

else

print 不及格

4. 使用Transact-SQL语句编程求100以内能被3整除的整数的个数。

答:

declare @n int, @count int

select @ n =1,@count=0

while @n<=100

begin

if @ n %3==0

set @count=@count+1

set @n=@n+1

end

print 100以内能被3整除的整数的个数=+convert(char,@count)

go

第5章   习题参考答案

  1. 回到工作场景,完成工作场景中提出的查询要求。

     略

  1. 简述SELECT语句的基本语法。

SELECT语句的完整语法格式如下:

SELECT  <列名选项>  

FROM  <表名>|<视图名称>

[WHERE <查询条件>|<联接条件>]

[GROUP BY <分组表达式>[HAVING <分组统计表达式>]]

[ORDER BY <排序表达式>[ASC|DESC]]

  1. 简述SELECT语句中的FROM、WHERE、GROUP BY以及ORDER BY子句的作用。
  • SELECT子句:用来指定查询返回的列,各列在SELECT子句中的顺序决定了它们在结果表中的顺序;
  • FROM子句:用来指定数据来源的表或视图;
  • WHERE子句:用来限定返回行的搜索条件;
  • GROUP BY子句:用来指定查询结果的分组条件;
  • ORDER BY子句:用来指定结果的排序方式。
  1. 简述WHERE子句可以使用的搜索条件及其意义。

常用的查询条件如下表:

查询条件

运     算     符

说明

比较

=、>、<、>=、<=、!=、<>、!>、NOT+上述运算符

比较大小

逻辑运算

AND、OR、NOT

用于逻辑运算符判断,也可用于多重条件的判断

字符匹配

LIKE、NOT LIKE

判断值是否与指定的字符通配格式相符

确定范围

BETWEENAND、NOT BETWEENAND

判断值是否在范围内

确定集合

IN、NOT IN

判断值是否为列表中的值

空值

IS NULL、IS NOT NULL

判断值是否为空

  1. 举例说明什么是内连接、外接和交叉连接?

交叉连接也称非限制连接,又叫广义笛卡尔积。两个表的广义笛卡尔积是两表中记录的交叉乘积,结果集的列为两个表属性列的和,其连接的结果会产生一些没有意义的记录,而且进行该操作非常耗时。因此该运算的实际意义不大。

交叉连接会产生很多冗余的记录,那么如何筛选出有用的连接呢?通过内连接来实现,内连接也称为简单连接,它会把两个或多个表进行连接,只查出匹配的记录,不匹配的记录将无法查询出来。这种连接查询是平常用的最多的查询。内连接中常用的就是等值连接和非等值连接。等值连接的连接条件是在WHERE子句中给出的,只有满足连接条件的行才会出现在查询结果中。这种形式也称为连接谓词表示形式,是SQL语言早期的连接形式。当连接条件中的关系运算符使用除=以外的其他关系运算符时,这样的内连接称为非等值连接。

外连接是指连接关键字JOIN的后面表中指定列连接在前一表中指定列的左边或者右边,如果两表中指定列没有匹配行,则返回空值。

外连接的结果不但包含满足连接条件的行,还包含相应表中的所有行。外连接有三种形式,其中的OUTER关键字可以省略:

(1) 左外连接(LEFT OUTER JOIN或LEFT JOIN):包含左边表的全部行(不管右类似于这样的自身连接在实际应用中还有很多,例如,求与“赵权”同职称的老师等。边的表中是否存在与它们匹配的行),以及右边表中全部满足条件的行。

(2) 右外连接(RIGHT OUTER JOIN或RIGHT JOIN):包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边表中全部满足条件的行。

6. INSERT语句的VALUES子句中必须指明哪些信息,必须满足哪些要求?

INSERT语句格式为:

INSERT  INTO  表名[(列名1,…)]  VALUES  (列值1,…)

  1. 在插入数据时,表明后面的列名不能为空,并且VALUES后面的列值须和列名一一对应;
  2. 在使用语句整体插入数据时,须根据数据库里的所有字段按顺序填写对应字段。

7. 使用教学管理数据库,进行如下操作:

(1) 查询所有课程的课程名和课程号;

   SELECT 课程名,课程号

     FROM 课程

(2) 查询所有考试不及格的学生的学号、姓名和分数;

   SELECT 学号,姓名,分数

     FROM 学生,选课

    WHERE 选课.成绩<60 AND 学生.学号=选课.学号

(3) 查询年龄在18-20岁之间的学生姓名、年龄、所属院系和政治面貌;

    SELECT 学号,年龄,系别,政治面貌

      FROM 学生

    WHERE 年龄 BETWEEN 18 AND 20

(4) 查询所有姓李的学生的学号、姓名和性别;

     SELECT 学号,年龄,系别,政治面貌

       FROM 学生

     WHERE 姓名 LIKE 李%

(5) 查询名字中第2个字为字的女学生的姓名、年龄和所属院系;

    SELECT 姓名,年龄,系别

      FROM 学生

    WHERE 年龄 姓名 LIKE _华%

(6) 查询所有选了3门课以上的学生的学号、姓名、所选课程名称及分数;

    SELECT 学生.学号,课程号,姓名,分数

FROM 学生,课程,选课

WHERE 学生.学号=选课.学号 AND 课程.课程号=选课.课程号

GROUP BY 学生.学号

HAVING COUNT(*)>=3

(7) 查询每个同学各门课程的平均分数和最高分数,按照降序排列输出学生姓名、平均分数和最高分数;

    SELECT 姓名,AVG(分数),MAX(分数)

FROM 学生,选课

WHERE 学生.学号=选课.学号

ORDER BY AVG(分数) DESC

(8) 查询所有学生都选修了的课程号和课程名。

    SELECT 课程号,课程名

      FROM 课程

    WHERE NOT EXISTS (SELECT *

                          FROM 学生

                         WHERE NOT EXISTS (SELECT *

                           FROM 选课

                        WHERE 学号=学生.学号

AND 课程号=课程.课程号)

第6章   习题参考答案

1. 使用T-SQL语句管理表的数据,插入语句,修改语句,删除语句分别是什么?

答:插入语句是:

INSERT [INTO] <table_name > (column_name 1, column_name 2, column_name n)

VALUES(values 1, values 2,, values n) 

修改语句是:

UPDATE table_name

SET column_1 =expression_1, column_2 =expression_2, …, column_n =expression_n

[WHERE search_conditions]

删除语句是:

DELETE FROM table_name [WHERE search_conditions]

2. 向表中插入数据一共有几种方法?

答:(1)插入简单记录值行

(2)插入多行记录值

(3)利用SELECT插入查询结果集

(4)利用BULK INSERT语句进行大批量插入数据

3. 删除表中的数据可以使用哪几种语句?有什么区别?

答:删除表中的数据可以使用DELETE语句、TRUNCATE TABLE语句以及DROP TABLE语句。使用TRUNCATE TABLE语句比DELETE 语句要快,因为它是逐页删除表中的内容,而DELETE则是逐行删除内容。TRUNCATE TABLE是不记录日志的操作,它将释放表的数据和索引所占据的所有空间以及所有为全部索引分配的页,删除的数据是不可恢复的。而DELETE语句则不同,它在删除每一行记录时都要把删除操作记录在日志中。删除操作记录在日志中,可以通过事务回滚来恢复删除的数据。用TRUNCATE TABLE和DELETE语句都可以删除所有的记录,但是表结构还在,而DROP TABLE不但删除表中的数据,而且还删除表的结构并释放空间。

第7章   习题参考答案

1. 唯一约束和主键约束的区别是什么?

答:RPRIMAY KEY约束与UNIQUE约束的区别如下:

(1)一个表中只能有一个RPRIMAY KEY约束,但可以有多个UNIQUE约束。

(2)UNIQUE约束所在的列允许空值,只能出现一个空值,但是RPRIMAY KEY约束所在的列不允许空值。

(3)在默认情况下,RPRIMAY KEY约束强制在指定的列上创建一个唯一性的聚集索引;UNIQUE约束强制在指定的列上创建一个唯一性的非聚集索引。

2. 规则对象与CHECK约束有什么区别?

答:CHECK 约束比规则更简明,一个列只能应用一个规则,但是却可以应用多个 CHECK 约束。CHECK约束可作为CREATE TABLE 语句的一部分进行指定,而规则以单独的对象创建,然后绑定到列上。

3. 什么是数据库的完整性?完整性有哪些类型?

答:数据完整性(Data Integrity)指的是存储在数据库中的所有数据值均为正确合理的状态。如果数据库中含有不正确的数据值,则该数据库被称为丧失数据完整性。数据完整性分为4个类别:实体完整性(Entity integrity),域完整性(Domain integrity),引用完整性(Referential integrity),用户定义完整性(User-defined integrity)。

4. 创建一个“职工”数据表,包含职工号 char(6)、姓名 nvarchar(4)、性别 nchar(1)、部门 nvarchar(10)字段。设置“职工号”为主键、“姓名”字段设置唯一约束、“性别”字段设置为只能取值“男”或“女”、“部门”字段设置默认值为“销售处”。

答:CREATE TABLE 职工

( 职工号 char(6) primary key,

姓名 nvarchar(4) unique,

性别 nchar(1),

部门 nvarchar(10))

CREATE RULE sex_rule AS @性别 in (’, ‘’)

CREATE RULE department_default AS ‘销售处

  Exec Sp_bindrule ‘sex_rule’, ‘职工.性别

  Exec Sp_bindefault ‘department_default’, ‘职工.部门

第8章   习题参考答案

1. 简答题

(1)  本章介绍了哪几种索引,分别描述每种索引的主要特征。

答:1. 基于行的索引

基于行的(或行存储)索引是传统的索引,将数据存储为数据页中的行。这些索引包括聚集索引和非聚集索引。

1) 聚集索引

聚集索引基于键列存储和排序表的叶级数据。实际的存储页链接在一起,所以可以按照聚集键的顺序依次读取表,导致的I/O开销极小。每个表只可以有一个聚集索引,因为只可以按照一种顺序排序数据,而且聚集索引代表了实际的表数据。

2) 非聚集索引

非聚集索引包含索引键值和行定位器,行定位器指向实际的数据行。如果没有聚集索引,行定位器就是实际数据行的RowID指针。如果存在聚集索引,行定位器就是该行的聚集索引键。

3) 覆盖索引

覆盖索引是满足(覆盖)特定查询的所有字段需求的索引。通过在CREATE INDEX语句中使用INCLUDE短语,非聚集索引在叶级可以包含非键列,以帮助覆盖查询。这些索引类型可以改进查询性能,并减少I/O操作,因为满足查询所需要的列作为键列或非键列包括在索引自身中,不需要再读取实际的数据行。

4) 过滤索引

过滤索引使用WHERE子句指示将要索引哪些行。因为只是索引表中的部分行,所以可以创建较小的数据集存储到索引中。过滤索引总是非聚集索引,因为它们选择总记录集的一个子集,而总记录集用表上的聚集索引表示。如果查询的WHERE子句可用过滤索引的WHERE子句中的行满足,那么就会在查询计划中选择过滤索引。

2. 基于列的索引

基于列的索引是在单独列上创建的索引。基于列的索引有两种主要类型:列存储索引(SQL Server 2012中首次引入)和XML索引(提供了XML列中的值的索引)。

列存储索引

列存储索引在SQL Server 2012中首次引入。在这种基于列的索引中,为每个列创建行值的一个索引,然后所有的索引连接起来,表示表的基本数据存储。这些索引基于Vertipaq引擎实现,该引擎实现能够实现高压缩比,处理大型数据集。

3. 内存优化索引

SQL Server 2016创建了新的索引来支持内存优化表。散列索引保存在内存中,用于访问内存优化(Hekaton)表中的数据。所需要的内存量与散列索引使用的桶计数有关。

内存优化的非聚集索引将对从内存优化表中访问的数据进行排序。这些索引只能使用CREATE TABLE和CREATE INDEX语句创建,并且是为范围排序扫描(按照排序顺序读取大量数据)创建的。当内存表加载到内存中时会创建这些索引,它们不会被持久化到物理表。

4. 其他索引类型

SQL Server中还有其他一些类型的索引用于支持具体的开发主题。本节将介绍这些类型的基本知识,要详细了解这些索引,请阅读联机丛书中的“索引”小节。

1) XML索引

XML索引是一种特殊的索引类型,用于索引存储在XML列中的值。这些索引拆分XML列并存储详细信息,供在SQL查询中快速检索。XML列可能很大在运行时将XML数据拆分成可读的数据元素会减缓大型XML查询。通过使用XML索引,这种拆分是提前完成的,在运行时读取很快。

2) 全文索引

创建全文索引是为了支持SQL Server中的全文搜索功能。全文索引让用户和应用程序能够在SQL Server表中查询基于字符的数据。必须先在表上创建全文索引,然后才能在全文搜索中包含它。

3) 空间索引

空间索引对空间数据列进行索引。空间数据列包含GEOMETRY或GEOGRAPHY类型的值。空间索引支持处理空间数据的操作,如内置的地理方法(STContains()、STDistance()、STEquals()、STIntersects()等)。为了让优化器能够选择查询,必须在查询的JOIN或WHERE子句中使用这些方法。

  1.  索引数据库的重要组成部分包括哪些?

答:索引数据库的重要组成部分包括创建分区和索引,以及高级的索引技术,如过滤索引和覆盖索引。

  1.  重新组织和重新构建索引的区别是什么?

答:列存储索引在SQL Server 2012中首次引入。在这种基于列的索引中,为每个列创建行值的一个索引,然后所有的索引连接起来,表示表的基本数据存储。这些索引基于Vertipaq引擎实现,该引擎实现能够实现高压缩比,处理大型数据集。在SQL Server 2012中,这些索引是不可更新的——要在索引中添加值,就需要重新构建索引。

  1.  聚集索引和其他索引有什么本质区别?

答:1.聚集索引和非聚集索引的根本区别是表记录的排列顺序和与索引的排列顺序是否一致,聚集索引表记录的排列顺序与索引的排列顺序一致,优点是查询速度快,因为一旦具有第一个索引值的纪录被找到,具有连续索引值的记录也一定物理的紧跟其后。
        2.聚集索引的缺点是对表进行修改速度较慢,这是为了保持表中的记录的物理顺序与索引的顺序一致,而把记录插入到数据页的相应位置,必须在数据页中进行数据重排,
降低了执行速度。非聚集索引指定了表中记录的逻辑顺序,但记录的物理顺序和索引的顺序不一致,聚集索引和非聚集索引都采用了B+树的结构,但非聚集索引的叶子层并不与实际的。

第9章   习题参考答案

1. 什么是事务?简述事务ACID原则的含义。

答:事务是由一组SQL语句组成的逻辑处理单元,事务具有以下4个属性,通常简称为事务的ACID属性。
ACID是Atomic(原子性)、Consistency(一致性)、Isolation(隔离性)、Durability(持久性)的英文缩写。
Atomic(原子性):指整个数据库事务是不可分割的工作单位。只有使据库中所有的操作执行成功,才算整个事务成功;事务中任何一个SQL语句执行失败,那么已经执行成功的SQL语句也必须撤销,数据库状态应该退回到执行事务前的状态。
Consistency(一致性):指数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。例如对银行转帐事务,不管事务成功还是失败,应该保证事务结束后ACCOUNTS表中Tom和Jack的存款总额为2000元。
Isolation(隔离性):指的是在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。
Durability(持久性):指的是只要事务成功结束,它对数据库所做的更新就必须永久保存下来。即使发生系统崩溃,重新启动数据库系统后,数据库还能恢复到事务成功结束时的状态。

  1. 为什么要使用锁?SQL Server 2016提供了哪几种锁的模式。

答:数据库锁的产生原因:数据库和操作系统一样,是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。加锁是实现数据库并 发控制的一个非常重要的技术。在实际应用中经常会遇到的与锁相关的异常情况,当两个事务需要一组有冲突的锁,而不能将事务继续下去的话,就会出现死锁,严 重影响应用的正常执行。
    在数据库中有两种基本的锁类型:排它锁(Exclusive Locks,即X锁)和共享锁(Share Locks,即S锁)。当数据对象被加上排它锁时,其他的事务不能对它读取和修改。加了共享锁的数据对象可以被其他事务读取,但不能修改。数据库利用这两种基本的锁类型来对数据库的事务进行并发控制

  1. 什么是死锁?怎么预防死锁?怎么解决死锁?

答:当事务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) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
  这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。
  死锁的解除与预防:
  理解了死锁的原因,尤其是产生死锁的四个必要条件,就可以最大可能地避免、预防和解除死锁。所以,在系统设计、进程调度等方面注意如何不让这四个必要条件成立,如何确定资源的合理分配算法,避免进程永久占据系统资源。此外,也要防止进程在处于等待状态的情况下占用资源。因此,对资源的分配要给予合理的规划。

  1. 试说明使用游标的步骤和方法。

答:游标(cursor)是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果。每个游标区都有一个名字,用户可以用SQL语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理。游标提供了一种对从表中检索出的数据进行操作的灵活手段。
使用游标的基本步骤:
1、声明游标。把游标与T-SQL语句的结果集联系起来。
2、打开游标。
3、使用游标操作数据。
4、关闭游标。

第10章   习题参考答案

1. 试说明存储过程的特点及分类。

答:存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。存储过程可以分三大类:

系统存储过程:

用来管理SQL server和现实有关数据库和用户信息的存储过程

过程开头SP_开头,存放在master 数据库中

扩展存储过程:

使用其他变成语言创建外部存储过程,并将这个存储过程

在SQL server中作为存储过程来使用。XP_开头

自定义存储过程:

用户在SQL server 中通过采用SQL语句创建的存储过程,通常已USP_开头。

  1. 创建一个存储过程,显示所有价格在15美元以下的书的书名,类型,价格。

答:CREATE PROCEDURE show_title

AS

SELECT title,type,price

FROM titles

WHERE price < 15

GO

EXEC show_title

  1. 把价格作为参数,创建一个能显示在某两个指定价格之间的书的书名,类型,价格。

答:CREATE PROCEDURE show_title2

 @price1 money,@price2 money

AS

SELECT title,type,price

FROM titles

WHERE price between @price1 and @price2

GO

show_title2 12,20

  1. 使用OUTPUT参数,创建一个计算圆柱体体积的存储过程。并执行它。

答:CREATE PROCEDURE comp_area

   @r  smallint,

   @h  smallint,

   @result decimal(10,2) OUTPUT

AS

   SET @result = PI()*SQUARE(@r)* @h

GO

DECLARE @answer decimal(10,2)

EXECUTE comp_area 2,3, @answer OUTPUT

SELECT 'The result is: ', @answer

  1.  A) 建立price_change表,准备用来存放书的价格变化信息,有以下几列:title_id, type, old_price, new_price, change_date, operator。
  1. 建立一个更新触发器,一旦titles表发生更新,立即把相关信息存放到price_change表中。

    答:create table price_change

(

title_id varchar(20),

type varchar(20),

old_price money,

new_price money,

change_date datetime,

operator varchar(20)

)

go

create trigger tri_price

on titles

for update

as

insert into price_change

select o.title_id,o.type,o.price,n.price,getdate(),user_name()

from deleted o JOIN inserted n

ON o.title_id = n.title_id

go

update titles set price = price*1.1

  1. 修改习题5,使得只有当price列被更新时,才会触发触发器。

答:create trigger tri_price

on titles

for update

as

if update(price)

begin

  insert into price_change

  select o.title_id,o.type,o.price,n.price,getdate(),user_name()

  from deleted o JOIN inserted n

  ON o.title_id = n.title_id

end

go

7. 创建一个存放书的编号、书名、类型、价格、对应作者的编号、姓名、电话、住址的视图。为这个视图创建一个Instead of更新触发器,把对视图的更新放到触发器里面来做。(假设,我们只允许更新这个视图的某几个列:price, phone, address)。添加测试数据。更新v_titledetail,把书编号为‘LI1234’的书的价格改为200,该书作者的电话该为‘02512345678’

use pubs

go

create view v_titledetail

as

select t.title_id, title, type, price, a.au_id, au_lname, au_fname, phone, address

from titles t,titleauthor ta,authors a

where t.title_id = ta.title_id and ta.au_id = a.au_id

create trigger tri_titledetail

on v_titledetail

instead of update

as

declare @price money,

        @phone varchar(20),

        @address varchar(40),

        @title_id varchar(20),

        @au_id varchar(20)

select @title_id = title_id, @price = price, @au_id = au_id, @phone = phone ,@address = address

from inserted

update titles set price = @price where title_id = @title_id

update authors set phone = @phone, address = @address where au_id = @au_id

Go

update v_titledetail

set price = 200, phone = '025123445678'

where title_id = 'LI1234'

  1.   习题参考答案

1. 填空题

(1) 虚表,定义;

(2) 视图分为3种:标准视图、索引视图和分区视图;

(3) 创建视图使用的T-SQL语句是create view;修改视图使用的T-SQL语句是alterview;删除视图使用的T-SQL语句是drop view。

2. 简答题

(1) 视图的作用是什么?

答:视图主要有以下作用:

  1. 视图能够简化用户的操作;
  2. 视图使用户能以多种角度看待同一数据;
  3. 视图对重构数据库提供了一定程度的逻辑独立性;
  4. 视图能够对机密数据提供安全保护;
  5. 适当使用视图可以更清晰地表达查询。
  1. 视图和基本表的主要区别和联系是什么?

答:视图:在SQL中,视图是外模式一级数据结构的基本单位。它是从一个或几个基本表中导出的表,是从现有基本表中抽取若干子集组成用户的“专用表”。
    基本表:基本表的定义指建立基本关系模式,而变更则是指对数据库中已存在的基本表进行删除与修改。
二者的区别:

1、视图是已经编译好的sql语句。而表不是
2、视图没有实际的物理记录。而表有。
3、表是内容,视图是窗口
4、表只用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时四对它进行修改,但视图只能有创建的语句来修改
5、表是内模式,试图是外模式
6、视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全的角度说,视图可以不给用户接触数据表,从而不知道表结构。
7、表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表。
8、视图的建立和删除只影响视图本身,不影响对应的基本表。

联系:视图(view)是在基本表之上建立的表,它的结构(即所定义的列)和内容(即所有数据行)都来自基本表,它依据基本表存在而存在。一个视图可以对应一个基本表,也可以对应多个基本表。视图是基本表的抽象和在逻辑意义上建立的新关系

3. 在教学管理数据库中完成如下操作:

(1) 创建“市场营销”系的学生视图;

Create view v-SHICHANG

AS

SELECT *

FROM STUDENT

WHERE SDEPT=市场营销

(2)创建选修“操作系统”课程的学生视图;

Create view v-caozuo

As

Select *

From student

Where sno in (select sno  from sc where cno in (select cno  from course where cname=操作系统))

  1. 在上述视图的基础上尝试是否能插入、删除、更新记录。如若不能,请思考原因是什么?

答:创建的前一个视图可以进行插入、删除、更新,第二个不行,因为只有行列子集视图才能做这些操作。

  1.   习题参考答案
  1. 假如jack晋升为本部门的主管,想要授予jack查询商品销售”数据库的sales表的权限,如何完成?

答:创建一个部门主管的角色:

Create role 部门主管

给角色授予权限:

Grant  select  on  sales  to  部门主管

让jack担当这个角色

Exec sp_addrolemember 部门主管,‘jack’

  1. 假如jack调离本岗位,想要回收jack对sales表的查询权限,如何完成?

答: 有两种方法,第一种方法,收回查询权限:Revoke  select  on  sales  from  部门主管;第二种方法:让JACK不再担当该角色:Exec sp_droprolemember 部门主管,‘jack’

  1. 假如jack晋升为本公司的总经理,如何使数据库用户jack拥有该数据库的全部操作权限?

答:让jack成为数据库的所有者:Exec  sp_addrolemember ‘db_owner’,’ jack’

  1. 假如用户已经在SQL Server服务器内为Windows组创建了登录账户,为便于组内成员能够访问某数据库下的某些对象,用户还需要做什么?

答:首先在某库下创建一个用户,将Windows组登录账户映射到该用户上。然后对该用户授予访问某些对象的权限。

5. 如何使应用程序角色有效?

答:当应用程序角色使用密码被应用程序的会话激活以后,在会话期间,会话就失去了适用于登录、用户账户或所有数据库中的角色的权限,转变为应用程序角色的权限。

  1.   习题参考答案
  1. 物理备份设备与逻辑备份设备有什么区别?

答:物理备份设备是一个操作系统文件,用路径加上文件名称来标识。例如:f:\testbackup.bak。

逻辑备份设备是用户对物理备份设备另外命名的简化名称。

  1. 简述数据库备份与还原的过程。

答:备份就是对数据库中的数据产生副本。通过副本将灾难后的数据进行全部或部分恢复。数据还原就是在数据库的一定生命周期的某一时刻还原数据。作为数据库管理员,应该将数据还原的频率减到最低,预计潜在灾难所能影响到的范围,当灾难发生时,加快还原速度并快速地验证还原是否成功。

备份和还原的作用:降低数据丢失的可能性,并能够及时恢复已经丢失的数据,可以在数据库系统中实施备份和恢复策略。

  1. SQL Server 2016数据库恢复模式分为几种?

答:SQL Server 2012数据库恢复模式分为三种:完整恢复模式、大容量日志恢复模式、简单恢复模式。

  1. 如何制定备份与恢复计划?

答:为确保数据库系统的安全,应该制定一个完善可行的备份与恢复计划。我们通常根据恢复能力、备份文件的大小及备份时间来确定备份类型。

常用备份的方案有只进行安全完整数据库备份;或进行完整数据库备份同时进行事务日志备份;或进行完备份整数据库备份和差异数据库。

  1. 如何减少备份与恢复操作的执行时间?

答:使用多个备份设备同时进行备份处理,同样,可以从多个备份设备同时进行数据库恢复操作。

综合使用完全数据库备份、差异备份或事务日志备份来减少每次需要备份的数据量。

使用文件或文件组备份以及事务日志备份,可以只备份或恢复那些包含相关数据的文件,而不是整个数据库。

6. 差异备份作为备份策略的一部分,其优缺点是什么?

差异备份是指备份自最近一次完全数据库备份后更新的数据。所以通过差异备份能够节省恢复过程所需的时间。只需要恢复完全备份和最近一次的差异备份,用户就能还原数据库。

差异备份不能捕获数据库的更改,所以用户无法利用它从某个即时点来恢复数据库。为了能够执行即时点还原,用户就必须使用事务日志备份。此外,随着最近一次完全数据库备份与差异备份之间的时间不断增加,与先前创建的差异备份大小相比,晚建的差异备份将会更大。

  1. 习题参考答案

1. 简答题

(1)  SQL SERVER的维护计划和作业的区别?

答:二者的区别:可以把维护计划看作是针对数据库进行维护的作业模板。自定义作业具有更广泛的用途,当然,也具有更复杂的操作。所以,如果仅仅是做个数据库优化、备份什么的,用维护计划比较合适;而如果需要制定维护计划应对不了的操作,比如说,每天定时运行某个存储过程,就只能用作业来实现。 

维护计划预置了一些模板,实际上和作业一样去执行。

维护计划本质上也是作业去调度的,所以可以看成是作业中的一部分。

如果SQL的维护计划出现问题,那我们的自动定时备份就用作业来完成.对于服务器数据的备份是比较麻烦的事情,如果每天或者经常要手工去备份自然是很痛苦的事情。这时可以通过sql server的作业调度来建立自动备份。

  1.  SQLServer2014为数据文件创建维护计划的步骤是怎样的?

答:在创建维护计划之前先看一下SQL Server代理有没有启动,如果没有启动话,选择SQL Server代理,右键点击启动。下面分13步创建维护计划:

1、在“Microsoft SQL Server Management Studio”界面里面打开管理,选择维护计划,点击右键,选择维护计划向导;

2、在出现的SQL Server维护计划向导界面中点击“下一步”;

3、在选择计划属性界面,点击更改;

4、在作业计划属性界面修改多久备份一次,在频率里面设置多久备份一次,在每天频率里面设置几点开始备份。设置好之后点击确定。

5、在选择计划属性里面就能看到刚刚设置的计划,点击下一步按钮。

6、选择要维护的任务,点击下一步按钮;

7、在选择维护任务顺序界面点击下一步按钮;

8、在定义“备份数据库(完整)”任务界面点击<选择一项或者多项>的黑色三角,选择要备份的数据,点击确定。

9、选择要备份到的文件,点击下一步;

10、在定义“清除维护”任务界面选择要删除的文件夹里的文件和保留多长时间以上的文件点击下一步按钮。

11、在选择报告选项界面点击下一步。

12、完成该向导界面点击完成。

13、在维护计划向导进度界面点击关闭。

维护计划就设置完成了。

  1. 为什么要使用SQL Server代理?

答:SQL Server 代理是一种 Microsoft Windows 服务,它在 SQL Server 中执行计划的管理任务,即“作业”。
    SQL Server 代理使用 SQL Server 来存储作业信息。作业包含一个或多个作业步骤。 每个步骤都有自己的任务。例如,备份数据库。
SQL Server 代理可以按照计划运行作业,也可以在响应特定事件时运行作业,还可以根据需要运行作业。
    例如,如果希望在每个工作日下班后备份公司的所有服务器,就可以使该任务自动执行。 将备份安排在星期一到星期五的 22:00 之后运行,如果备份出现问题,SQL Server 代理可记录该事件并通知您。

  1. 习题参考答案
  1.  在SQL Server中监控工具都包括哪些?

答:SQL Server的广泛普及使SQL Server监控工具成为长期网络维护的先决条件。使用服务器监控工具跟踪服务器的运行状况可以为你提供解决性能问题所需的信息。从长远来看,解决性能问题将使你的网络保持正常运行。

忽视服务器监控可能会导致服务器停机并使企业损失惨重。利用SQL Server监控工具是保护服务器免受代价高昂的系统故障的方法。最好的SQL Server监控工具如下所示:

SolarWinds Database Performance Analyzer for SQL Server

Paessler SQL monitoring software PRTG

Idera SQL Diagnostic Manager

Lepide SQL Server Auditing

SQL Power Tools

Red-Gate SQL Monitor

dbForge Monitor

Apex SQL Monitor

SentryOne SQL Sentry

Spiceworks SQL Server Monitoring

SolarWinds Database Performance Analyzer for SQL Server

  1.  在数据库性能监控都包括哪些内容?

答:数据库性能监控是一个常非大范围。

包含:表空间、段、索引、主键、数据缓冲区、库缓冲、用户锁、等待事件、回滚段、I/O、共享池等等。(空间、索引、等待事件)

  1.  SQL Server性能监控使用到的计数器包括哪几方面?

答:SQL Server性能监控使用到的计数器包括三方面:内存、CPU、IOPS

  1.  如何在SQL上设置跟踪?

答:在系统级别上设置sql跟踪的方法如下:

1.在sqlplus中以sys/ as sysdba身份登陆到数据库。
2.打开跟踪,在sqlplus中输入alter sysetem set events '10046 trace name context forever,level &level';
(其中&level可以输入1,4,8,12三个级别,不同的级别含有不同级别的信息);
3.然后到ArcMap或ArcCatalog中进行你想跟踪的操作;
4.关闭跟踪,在sqlplus中输入alter systemm set events '10046 trace name context off';
5.查找你所跟踪的session的ID。
该方法优点:可以跟踪所有的oracle的后台进程所执行的sql,包括系统后台进程和用户进程,并且可以跟踪所有的操作;
缺点:跟踪所有的后台进程,跟踪信息量比较大。

你可能感兴趣的:(大数据)