数据库基础及其应用第九章课后作业
数据库系统原理课后答案 第九章
9.1 名词解释(1)OODBS:是指面向对象数据库系统,它既具数据库管理的基本功能,又能支持面向对象的数据模型。
(2)ORDBS:基于对象关系数据模型的DBS称为对象关系数据库系统(ORDBS)。
(3)平面关系模型:传统的关系模型称为“平面关系模型”,它要求关系模式具有第一范式(1NF)性质,关系具有规范化的结构。
也就是规定属性值是不可分解的,即不允许属性值具有复合结构(元组或关系)。
(4)嵌套关系模型:是从平面关系模型发展而成的。
它允许关系的属性值又可以是一个关系,而且可以出现多次嵌套。
嵌套关系突破了1NF的定义框架,是“非1NF关系”。
(5)复合对象模型:在嵌套关系模型上进一步放宽要求。
在关系定义上,集合与元组不再有交替出现的严格限制,此时的关系中,属性类型可以是基本数据类型、结构类型(元组类型)或集体类型(即关系类型)。
(6)数据的泛化/细化:是对概念之间联系进行抽象的一种方法。
当在较低层上的抽象表达了与之联系的较高层上抽象的特殊情况时,就称较高层上抽象是较低层上抽象的"泛化",而较低层上抽象是较高层上抽象的"细化"。
(7)对象关系模型:在传统关系数据基础上,提供元组、数组、集合等更为丰富的数据类型及处理新数据类型操作的能力而形成的数据模型。
(注:传统关系模型只支持字符、数值、字串,布尔值等等基本数据类型及其处理功能)(8)类型级继承性:当继承性发生在类型级时,子类型继承了超类型的属性。
也就是说,超类型所具有的属性,在子类上也具有。
(9)表级继承性:继承性也可发生在表级,(就是元组集合上发生继承),子表继承超表全部属性,超表中每个元组最多可以与子表中一个元组对应,而子表中的每个元组在超表中恰有一个元组对应,并在继承的属性值上具有相同的值。
(10)引用类型:数据类型可以嵌套定义,在嵌套引用时,不是引用对象本身,而是个用对象标识符(即指针),这种指针被称为引用类型。
数据库基础及应用课程作业与评价参考解答
数据库基础及应用课程作业与评价参考解答中央电大计算机教研室第一次作业填空1. 依赖于2. 文件系统、数据库系统3. 文件、数据库4. 局部、全局5. 主属性、非主属性6. 多、多7. 1、多 8. 型、值9. 元组、属性 10. 关系定义、DBMS11. 封装、继承、多态12. 数据库管理员、数据库设计员、应用程序员、终端用户13. 外模式和模式、模式和内模式 14. 建立、维护15. 关系数据结构、关系完整性规则、关系运算 16. 单值、嵌套17. 候选、属性 18. 主、非主19. 空值、主码 20. 7、3、221. 选择、2 22. S、Π学生号X23. 课程号(X)、C 24. X←→Y、决定因素25. 非平凡、完全 26. 学号、系主任27. X→Y、X→Z、分解性 28. X、候选码29. (A,D)、2 30. (A,C,G)、331. 第一、不可再分 32. 数据冗余、操作异常(更新异常)33. 第一、3 34. 第二、235. 第三 36. BC、决定因素第二次作业一、填空题1. 视图、基本表2. create schema、drop schema3. 列级、表级4. 列级、表级5. 建立、修改、删除6. values、select7. 表、建立 8. 连接、安全9. 没有影响、有影响 10. select、from、where11. group by、order by 12. 需求分析、概念设计13. 数据流图、数据字典、需求说明书 14. 需求分析、ER图15. 商品实体、销售实体、收款实体 16. 全局模式、外模式17. 1对1、1对多 18. 设计要求、功能完善、操作方便19. 客房表、住宿表 20. 娱乐费表、催补款表21. 客房表、客房空闲表二、根据主教材第四章所给的商品库和教学库,按照下列所给的每条SQL查询语句写出相应的功能。
1. 从商品库中查询出每一种商品的商品代号、分类名、数量和品牌等信息。
《数据库及应用》(自考)课后习题参考答案(部分)
《数据库及应用》课后习题参考答案(部分)第一章 数据库基础知识1、实体标识符2、记录(元组),属性(字段)3、表、字段4、数据的正确性和一致性5、可作为键的属性6、对关系逐步分解的过程7、书号8、3NF 、2NF9、 R SR S2=2(R ×S)第二章 Access2000综述1、一、.mdb2、表、查询、报表、窗体、数据访问页3、外面4、打开数据库5、查询1=1第三章数据库的创建与管理1、详细信息、小图标2、关闭Access3、删除、删除4、数据库5、工具、数据库使用工具第四章表与关系1、设计2、导入3、链接4、链接5、like”W?????”“专科”or “本科” or “研究生”>=1000 and <=2000>=#1960-01-01# and <=#2000-01-01#“男” or “女”>=1011 and <=1999>=106、空值、空格7、空、空格8、自动编号9、一个、多个10、空值、升序11、提高查询效率12、参照完整性第五章查询1、1)select 姓名from student where 年龄>=19 and 年龄<=20 and 性别=“男”2)select 课程名,学时数from course where 课程名=“英语”3)select 姓名,课程名,成绩from student,course,grade where student.学号=grade.学号and course.课程号=grade.课程号4)select 姓名,性别,年龄+1 from student5) select * from student order by 年龄6)select 姓名,课程名,成绩from student,course,grade where student.学号=grade.学号and course.课程号=grade.课程号order by 成绩desc7) select 姓名,性别,年龄,课程名,成绩from student,course,grade here student.学号=grade.学号and course.课程号=grade.课程号and 成绩in ( select max(成绩) from grade )8)select 姓名,性别,课程名,成绩from student,course,grade here student.学号=grade.学号and course.课程号=grade.课程号and 成绩>802、行标题、列标题、交叉点3、姓名like “张*”4、家住北京且姓王的5、统计学时总数第6章窗体1、格式、浏览按钮、否2、左边,当前3、数据操作窗体,控制窗体,信息交互窗体4、数据,记录源5、窗体向导,设计6、设计7、shift8、选种要对齐的控件->格式菜单->对齐->靠左第7章报表1、报表页眉、报表页脚、页面页眉、页面页脚、组页眉、组页脚、主体2、视图菜单->报表页眉/页脚3、视图、排序/分组、排序/分组4、主体节的“强制分页”5、新行/新列6、字段、表达式7、=8、count(* ) 、组页眉、组页脚9、count(* ) 、报表页眉、报表页脚10、两第8 章数据访问页1、外部、HTML、.htm2、独立文件3、交互式报表页、数据输入页、数据分析页4、自动创建功能、向导、设计视图、将现有Web页转换为数据访问页5、设计、页面、网页预览6、设计、页面7、文件菜单->网页预览8、设计视图第9章宏与摸板1、操作2、宏组名.宏名3、显示宏名4、条件5、OpenTable 、OpenReport。
数据库原理与应用第九章
理平台,这里介绍使用SQL Server管理平台的方法。 在SQL Server 2005管理平台中,展开指定的数据表和数
据库,右击要操作的数据表,从弹出的快捷菜单中选择“修改” 命令,打开修改数据表界面,在要设置唯一性的属性上右击, 从弹出的快捷菜单中选择“索引/键”命令,打开“索引/键”对 话框,单击“添加”按钮后对话框将出现新的索引/键名称,用 户可以修改该索引/键的名称并设置“是唯一的”为“是”,完 成唯一约束的设置。
列的为空性决定表中的行是否可为该列包含空值。空值 (或NULL)不同于零(0)、空白或长度为零的字符串(如 "")。NULL的意思是没有输入,出现NULL通常表示值未知或 未定义。
9.2 约束的定义与操作
9.2.2 操作约束
约束的操作主要包括增加、修改和删除约束,其方法通 常有两种,SQL 语句和SQL管理平台。下面介绍使用SQL管 理平台的方法。
| <table_constraint> } [ ,...n]
9.1 数据表的定义与操作
9.1.3 删除数据表
删除数据表可以采用命令和管理平台两种方式删除表。这 里主要介绍使用管理平台删除数据表。
在SQL Server 2005管理平台中,展开指定的数据库和数据 表,右击要删除的数据表,从弹出的快捷菜单中选择“删除” 命令,将打开“删除对象”窗口,单击“确定”按钮即删除数 据表。单击“关系依赖图”按钮,可显示所有该表依赖的对象 以及依赖该对象的对象,当有对象依赖该表时,想删除该表就 必须先删除依赖该表的其他表,否则该表不能被删除。
在SQL Server 2005管理平台中,展开指定的数据表和 数据库,右击要操作的数据表,从弹出的快捷菜单中选择 “修改”命令,打开修改数据表界面,在要修改约束的属性 上右击,从弹出的快捷菜单中选择合适的约束命令,然后按 照创建各约束的步骤在对创建的约束进行增加、修改或删除 即可。
《MySQL数据库原理、设计与应用》第9章课后习题答案
第九章一、填空题1.数据库2.原子3.START TRANSACTION4.AUTOCOMMIT5.READ UNCOMMITTED二、判断题对1.对2.对3.错4.对5.对三、选择题1. C2.B、C、D3. B4. B5. D四、简单题1.请简述什么是事务。
答:在MySQL中,事务就是针对数据库的一组操作,它可以由一条或多条SQL语句组成,且每个SQL语句是相互依赖的。
只要在程序执行过程中有一条SQL语句执行失败或发生错误,则其他语句都不会执行。
也就是说,事务的执行要么成功,要么就返回到事务开始前的状态,这就保证了同一事务操作的同步性和数据的完整性。
2.请简述什么是事务的ACID特性。
答:①原子性是指一个事务必须被视为一个不可分割的最小工作单元。
②一致性是指在事务处理时,无论执行成功还是失败,都要保证数据库系统处于一致的状态,保证数据库系统从不返回到一个未处理的事务中。
③隔离性是指当一个事务在执行时,不会受到其他事务的影响。
④持久性是指事务一旦提交,其对数据库的修改就是永久性的。
五、实训题1.请利用事务实现在用户下订单时,检查商品库存是否充足。
START TRANSACTION;1# 查询id为1的商品的库存SELECT stock FROM sh_goods WHERE id = 1;# 根据结果回滚或提交COMMIT;2.请利用事务在用户下订单前,检测当前用户是否已被激活,若未激活,则需激活此用户后,才能再次下订单。
START TRANSACTION;# 查询id为1的用户是否激活SELECT is_active FROM sh_user WHERE id = 1;# 根据结果回滚或提交COMMIT;2。
数据库基础与应用第二版课后答案 王珊李盛恩编著
数据库基础与应用1.数据(DB):数据实际上就是描述事物得符号纪录。
2.数据库: 数据库实际上就是长期存储在计算机内得有组织得、可共享得数据集合。
3.从文件系统得视角上瞧去,文件就是无结构得,文件只就是一个字节流,因此,我们经常把文件叫做流式文件,实际上文件得数据就是有结构得,数据得结构需要程序员通过编写程序来建立与维护。
4.数据库应用可以分为两大类:联机事务处理(OLTP),联机分析处理(OLAP)、联机事务处理解决了组织结构业务自动化问题,而联机分析处理帮助管理层更好得分析组织结构得运站情况。
5、数据库管理系统(DBMS):数据库管理系统就是一类重要得软件,由一组程序组成。
其主要功能就是完成对数据库得定义、数据操作。
提供给用户一个简明得接口,实现事务处理等。
6.数据库管理系统得基本功能:数据得定义功能数据操作功能数据库得运行与管理数据库得建立与维护功能7.数据库管理系统由两大部分组成:查询处理器存储管理器8.层次结构:应用层语言翻译层数据存取层数据存储层操作系统数据库9、数据库系统:数据库系统就是基于数据库得计算机应用得系统,有四部分组成数据库数据管理系统应用系统用户。
10、数据库管理员得职责:(1)决定数据库中要存储得数据及数据结构(2)决定数据库得存储结构与存取策略(3)保证数据得安全性与完整性(4)监控数据库得使用与运行(5)数据库得改进与重组重构11.数据模型得三要素:数据结构数据操作完整性约束12、数据结构就是所研究得对象得类型得集合,这些对象就是数据库得组成成分,她们包含两类:一类就是与数据之间联系有关得对象。
一类就是与数据之间联系有关得对象。
13、数据操作:数据库主要有检索与更新(插入、删除、修改)两大类操作。
14、在关系模型中任何关系都要满足实体完整性与参照完整性。
15、三种数据模型:概念模型逻辑模型物理模型逻辑模型中有:层次模型网状模型关系模型面向对象模型对象关系模型其中层次模型与网状模型统称为非关系模型。
数据库第九章参考答案
第九章T-SQL基础P1641.从功能上划分,SQL分为哪4类?[难度↓]【解】SQL语句通常分成以下4类:数据查询语言数据操作语言数据定义语言数据控制语言2.NULL代表什么含义?将其与其他值进行比较会产生什么结果?如果数值型列中存在NULL,会产生什么结果?[难度↓]【解】在数据库中,NULL是一个特殊值,表示数值未知。
NULL不同于空字符或数字0,也不同于零长度字符串。
比较两个空值或将空值与任何其他数值相比均返回未知,这是因为每个空值均为未知。
空值通常表示未知、不可用或以后添加数据。
如果某个列上的空值属性为NULL,表示接受空值;空值属性为NOT NULL,表示拒绝空值。
如果数值型列中存在NULL,则在进行数据统计时就会产生不正确的结果。
3.使用T-SQL语句向表中插入数据应注意什么?[难度↓]【解】在使用T-SQL语句向表中插入数据时要注意以下几点:当向表中所有列都插入新数据时,可以省略列表名,但是必须保证VALUES 后的各数据项位置同表定义时的顺序一致。
要保证表定义时的非空列必须有值,即使这个非空列没有出现在插入语句中,也必须如此。
插入字符型和日期型值时,要加入单引号。
没有列出的数据类型应该具有以下属性之一:identity属性、timestamp 数据类型、具有NULL属性或者有一个默认值。
对于具有identity属性的列,其值由系统给出,用户不必往表中插入数据。
4.在SELECT语句中DISTINCT、ORDER BY、GROUP BY和HA VING子句的功能各是什么?[难度↓]【解】各子句的功能如下。
DISTINCT:查询唯一结果。
ORDER BY:使查询结果有序显示。
GROUP BY:对查询结果进行分组。
HA VING:筛选分组结果。
5.在一个SELECT语句中,当WHERE子句、GROUP BY子句和HA VING子句同时出现在一个查询中时,SQL的执行顺序如何?[难度↓↓]【解】其执行顺序如下:(1)执行WHERE子句,从表中选取行。
第9章课后习题答案
第9章习题答案1.简要说明数据库设计的步骤。
答:Access中数据库设计一般要经过五个步骤:(1)分析建立数据库的目的(2)确定数据库中需要的表(3)确定表中的字段(4)确定主关键字(5)确定表之间的关系2.Access数据表中主键的作用是什么?(P230- P231)答:Access中主键是由表中的一个或多个字段组成,用来唯一标识表中的某一条记录。
指定主键后,Access将阻止在主键中输入重复值或NULL值。
在一个数据库中多表间建立关系时,必须通过表的主键和外键建立。
3. Access支持的查询类型有什么?(P234)答:Access支持的查询类型有5类:(1)选择查询选择查询是最常见的查询类型,它从一个或多个表中检索数据,在一定的限制条件下,还可以通过选择查询来更改相关表中的记录。
使用选择查询也可以对记录进行分组,并且可对记录进行总计、计数以及求平均值等其他类型的计算。
(2)交叉表查询交叉表查询能够汇总数据字段的内容,汇总计算的结果显示在行与列交叉的单元格中。
交叉表查询可以计算平均值、总计、最大值、最小值等。
(3)参数查询参数查询会在执行时弹出对话框,提示用户输入必要的信息(参数),然后按照这些信息进行查询。
(4)操作查询操作查询是在一个操作中更改许多记录的查询,操作查询又可分为四种类型:删除查询、更新查询、追加查询和生成表查询。
(5)SQL查询SQL查询是使用SQL语句创建的查询,包括联合查询、传递查询、数据定义查询和子查询。
4.简述数据库中视图、查询与SQL语言的区别。
答:视图..是一种虚拟的表,为了简化复杂查询语句的书写,另外也提高了数据库一定的安全性。
查询..是利用SQL语句或创建查询的方式根据一定的条件进行检索,筛选出符合条件的记录,构成一个新的数据集合,方便对数据库进行查看和分析。
SQL..是一种结构化的查询语言,利用SQL语言可以对数据库...语言中数据进行定义、查询、更新等操作。
数据库系统原理教程课后习题及答案(第九章)
第9章数据库恢复技术1.试述事务的概念及事务的4 个特性。
答:事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。
事务具有4 个特性:原子性(Atomicity )、一致性(consistency )、隔离性( Isolation )和持续性(Durability )。
这4 个特性也简称为ACID 特性。
原子性:事务是数据库的逻辑工作单位,事务中包括的诸操作要么都做,要么都不做。
一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。
隔离性:一个事务的执行不能被其他事务干扰。
即一个事务内部的操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰。
持续性:持续性也称永久性(Perfnanence ) ,指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。
接下来的其他操作或故障不应该对其执行结果有任何影响。
2 .为什么事务非正常结束时会影响数据库数据的正确性,请列举一例说明之。
答:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。
如果数据库系统运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是不一致的状态。
例如某工厂的库存管理系统中,要把数量为Q 的某种零件从仓库1 移到仓库2 存放。
则可以定义一个事务T , T 包括两个操作;Ql = Ql 一Q , Q2= Q2 + Q。
如果T 非正常终止时只做了第一个操作,则数据库就处于不一致性状态,库存量无缘无故少了Q 。
3 .数据库中为什么要有恢复子系统?它的功能是什么?答:因为计算机系统中硬件的故障、软件的错误、操作员的失误以及恶意的破坏是不可避免的,这些故障轻则造成运行事务非正常中断,影响数据库中数据的正确性,重则破坏数据库,使数据库中全部或部分数据丢失,因此必须要有恢复子系统。
《数据库管理系统应用》第九章课后习题答案
第九章模块与VBA程序设计课后习题答案(P324)一、选择题:1~5. AADCA 6~10.CBDBA 11~15. BDDBB16~20. CADBC 21~26. DDDACD二、填空题:1. Visual Basic for Applications2. Sub;Function3. Dim4. 局部变量;模块变量;全局变量5. Dim或Private ;Public6. Static7. Type…End Type8. 选择结构;循环结构9. IIF();Switch();Choose() 10. 判定输入的数据是否为日期型数据11. Byval;传址调用12. On Error 13. 用于关闭错误处理14. 系统忽略错误,且继续处理随后的指令15. 用于接收用户从键盘输入的内容;MsgBox16. #或Double 17. 条件18. -1;019. Int(61*rnd()+15) 20. 计时器触发或Timer 21. OpenForm 22. 事件过程23. 计时器间隔或TimerInterval 24. MsgBox;False 25. Me.TimerInterval=0;close;i 26. MsgBox “数据处理结束!”,,”消息”27. X>=7 28. 5 29. 12 30. 9 31. 及格32. num;i 33. X=s;s=”0001”;Dim mc as New MyClass34. DAO;ADO 35. DBEngine36. CurrentDb();CurrentProject.Connection37. WorkSpace;Database;Field 38. Connection;RecordSet;Field;Command 39. Eof;StrSQL 40. Null或空值;从指定的记录集中检索特定字段的值- 1 -。
数据库第9章习题参考答案
第9章习题解答1.选择题(1)以下是合法的变量名。
A.4p B.姓名C."年龄" D.IfNot(2)InputBox函数的返回值类型是。
A.变体型 B. 整型C.实型D.字符型(3)在VB中,下面正确的逻辑表达式是。
A.x>y AND y>z B.x>y>z C.x>y AND >z D.x>y &y>z (4)在窗体上画一个名称为Commandl的命令按钮,然后编写如下程序:Private Sub Command1_Click()Static X As IntegerStatic Y As IntegerClsY=1Y=Y+5X=5+XPrint X,YEnd Sub程序运行时,3次单击命令按钮Commandl后,窗体上显示的结果为。
A.15 16 B.15 6 C.15 15 D.5 6(5)表达式3^2*2+3 MOD 10\4的值是。
A.18 B.1 C.19 D.0(6)在窗体上画一个水平滚动条,名称为HScroll1;再画一个文本框,名称为Text1。
要想使用滚动条滑块的变化量来调用文本框中文字的大小,则可满足的语句是。
A.Text1.FontName= HScroll1.Max B.Text1.FontSize= HScroll1.MinC.Text1.FontSize= HScroll1.value D.Text1.FontBold= HScroll1.value (7)以下不是图片框PictureBox的方法。
A.cls B.print C.pset D.ScaleMod(8)数据访问接口ADO是Microsoft处理数据库信息的新技术,以下关于ADO技术的叙述不正确的是。
A.ADO是一种ActiveX对象B.ADO采用了OLE DB的数据访问模式C.ADO是数据访问对象DAO、远程数据对象RDO和开放数据库互连ODBC三种方式的扩展D.ADO Data控件不能创建与数据库的连接(9)在Visual Basic中,ADO数据控件不能直接显示记录集中的数据,必须通过数据绑定控件来实现,下列控件不能与ADO数据控件实现绑定。
北京大学出版社数据库原理与应用课后答案
北京⼤学出版社数据库原理与应⽤课后答案数据库原理与应⽤第⼀章要求:1、掌握数据、数据库、数据库管理系统、数据库系统(数据库应⽤系统)等概念及组成;2、了解数据管理的发展,⽐较各管理阶段的优劣;3、了解⼏种数据库的结构模型及其优劣,了解关系模型的基本概念;4、掌握数据库的三级模式、⼆级映射、两个独⽴性三、教材习题解答1、什么是数据库?数据库的基本特点是什么?答:数据库是长期存储在计算机内的、有组织的、可共享的⼤量数据的集合。
其基本特点为可共享、低冗余度、有较⾼独⽴性和数据间有关联等。
2、从软件的⾓度来看,数据库系统的核⼼是什么?数据库系统和⽂件系统的主要区别是什么?答:核⼼是数据库管理系统(DBMS);主要区别是⽂件系统不能解决数据冗余和数据独⽴性问题,⽽数据库系统可以解决。
3、什么是数据库管理系统?常⽤的数据库管理系统有哪些?答:数据库管理系统(database management system)是⼀种操纵和管理数据库的⼤型软件,⽤于建⽴、使⽤和维护数据库,简称dbms。
它对数据库进⾏统⼀的管理和控制,以保证数据库的安全性和完整性。
⽤户通过dbms访问数据库中的数据,数据库管理员也通过dbms进⾏数据库的维护⼯作。
它可使多个应⽤程序和⽤户⽤不同的⽅法在同时或不同时刻去建⽴,修改和询问数据库。
DBMS提供数据定义语⾔DDL(Data Definition Language)与数据操作语⾔DML (Data Manipulation Language),供⽤户定义数据库的模式结构与权限约束,实现对数据的追加、删除等操作。
常⽤的有Oracle、db2、SQL Server、MySQL、ACCESS、Foxpro等。
4、什么是数据库的结构模型?通常有哪⼏种模型?答:数据库的结构模型是数据库中⽤来表⽰数据结构和数据联系的逻辑概述的集合,包括数据结构、数据操作和数据完整性约束三个部分。
按照不同的数据结构通常有层次模型、⽹状模型、关系模型和⾯向对象模型等。
数据库基础及其应用第九章课后作业
第九章 SQL Server数据库简单应用一、单选题1.使用“CREATE DATABASE AAA”命令所建立数据库文件的初始大小是(A)字节。
A. 1MB. 2MC. 3MD. 4M2.下面关于索引的描述不正确的是(B)。
A. 索引是一个指向表中数据的指针B. 索引是在列上建立的一种数据库对象C. 索引的建立和撤消对表的数据毫无影响D. 表的建立和撤消对索引毫无影响3.下面关于聚集索引和非聚集索引说法正确的是(B)。
A. 每个表只能建立一个非聚集索引B. 非聚集索引需要较多的硬盘空间和内存C. 一张表上不能同时建立聚集和非聚集索引D. 一个复合索引只能是聚集索引4.“Create Unique Index AAA On 学生表(学号)”将在学生表上创建名为AAA的(A)。
A. 惟一索引B. 聚集索引C. 复合索引D. 唯一聚集索引5.下列标识符可以作为局部变量使用(C)。
A. [@Myvar]B. My varC. @MyvarD. @My var6.Transact SQL支持的程序结构语句主要有(A)。
A. Begin…EndB. If…Then…ELSEC. Do CaseD. Do While7.属于事务控制的语句是(A)。
A. Begin Tran、Commit、RollBackB. Begin、Continue、EndC. Create Tran、Commit、RollBackD. Begin Tran、Continue、End8.SQL Server触发器主要针对下列语句创建(B)。
A. SELECT、INSERT、DELETEB. INSERT、UPDATE、DELETEC. SELECT、UPDATE、INSERTD. INSERT、UPDATE、CREATE9.下面关于索引的描述不正确的是(B)。
A. 索引是一个指向表中数据的指针B. 索引是在元组上建立的一种数据库对象C. 索引的建立和撤消对表中的数据毫无影响D. 表被撤消时将同时撤消在其上建立的索引10.以下哪种情况应尽量创建索引(A)。
数据库原理与应用第9章答案解析主编肖海蓉、任民宏
数据库原理与应用第9章答案解析主编肖海蓉、任民宏第9章数据库的备份与恢复9.1数据库的备份9.1.1备份的相关概念9.1.2SQLServer2012数据备份方式9.1.3SQLServer2012备份设备的管理9.1.4SQLServer2012数据库备份9.2数据库的恢复9.2.1SQLServer2012数据恢复模型9.2.2SQLServer2012数据库恢复9.2.3SQLServer2012数据库的分离和附加9.3数据的转换9.3.1SQLServer2012数据导出9.3.2SQLServer2012数据导入本章小结习题9第9 章数据库的备份与恢复课后习题参考答案1、简答题(1)简述SQL Server 2012 数据备份方式,并说明它们之间的区别。
答:SQL Server 2012 中把数据备份分为数据库备份、文件及文件组备份两大类。
①数据库备份分为完整备份、差异备份、事务日志备份。
其中完整备份是将整个数据库的所有数据及数据库对象完全复制到备份文件中;增量备份也称为差异备份,是完整备份的补充;这种备份方式须首先执行过一次完整备份,之后每次增量备份仅是备份最近一次完全备份以后数据库发生变化的数据;事务日志备份即备份发生在数据库上的事务,只备份事务日志中的内容。
完整备份比较容易理解,即备份一个完整数据库的当前所有内容,日志备份和增量备份都是在数据库完整备份的基础上备份后期数据库变动更新的内容,二者的区别是各自备份的起点不同。
②文件与文件组备份;若在创建数据库时建立了多个数据库文件或文件组,则可以使用文件和文件组备份方式。
一般可以将数据库文件组和文件存储在不同的备份设备上,通常应用于经常更新的超大型数据库或分布在多个文件的数据库,是比较复杂的备份。
(2)简述如何创建备份设备。
答:备份设备可以通过SQL Server Management Studio 或T-SQL 语言来实现。
1)使用SQL Server Management Studio 创建备份设备;①在对象资源管理器中,展开“服务器名称”→“服务器对象”→“备份设备”节点,右击“备份设备”节点,出现备份设备快捷菜单。
数据库原理与应用章节练习题及答案-第9章
1.试述实现数据库安全性控制的常用方法和技术。
数据库安全性控制的常用技术包括用户标识与鉴别、存取控制、视图机制、审计、密码保护等。
2.什么是数据库中的自主存取控制方法和强制存取控制方法?在自主存取控制方法中,用户对于不同的数据对象有不同的存取权限,不同的用户对同一对象也有不同的权限,而且用户还可将其拥有的存取权限转授给其他用户。
DBMS通过验证用户是否具有对访问数据有相应的权限来决定是否允许用户执行数据访问。
在强制存取控制中,DBMS所管理的全部实体被分为主体和客体两大类。
主体和客体都具有自己的安全级别。
但主体访问客体时,不仅要求主体具有访问客体的权限,而且要求主体的安全级和客体的安全级之间满足支配关系。
3.DBMS的完整性控制机制应具有哪些功能?DBMS的数据库完整性控制机制应具有以下三个功能:(1)定义功能:提供定义完整性约束条件的机制;(2)检查功能:检查用户发出的操作请求是否违背了约束条件。
一般有两种检查方式:一种是立即执行约束(即一条语句执行完成后立即检查),另一种是延迟执行约束(即在整个事务执行完毕后再检查约束);(3)违约响应功能:如果操作请求使数据违背了完整性约束条件,则采取一定的动作来保证数据的完整性。
4.试述事务的概念及事务的四个特性。
数据库系统中的事务是一个不可分的操作序列,其中的操作要么全部都不执行,要把全部都执行。
事务一般应满足四个性质,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。
这四个性质在数据库领域中一般合称为事务的ACID性质。
(1)原子性事务的原子性是指一个事务内部的所有操作要么全部都执行,要么一个也不执行,即所有操作是一个整体。
(2)一致性事务的一致性是指事务的执行保证数据库从一个一致状态转到另一个一致状态,即数据不会应事务的执行而导致不一致。
但是,事务的内部无须满足数据库的一致性。
数据库课后作业答案
数据库课后作业答案第一章:绪论(P37)1.试述数据、数据库、数据库系统、数据库管理系统的概念。
(1)数据(Data) :描述事物的符号记录称为数据。
数据的种类有数字、文字、图形、图像、声音、lE文等。
(2) 数据库( DataBase ,简称DB): 数据库是长期储存在计算机内的、有组织的、可共享的数据集合。
数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。
(3) 数据库系统(DataBase Sytem ,简称DBS): 数据库系统是指在计算机系统中引入数据库后的系统构成,一般由数据库、数据库管理系统(及其开发工具)、应用系统、数据库管理员构成。
(4) 数据库管理系统(DataBase Management Sytem ,简称DBMS): 数据库管理系统是位于用户与操作系统之间的一层数据管理软件,用于科学地组织和存储数据、高效地获取和维护数据。
DBMS 的主要功能包括数据定义功能、数据操纵功能、数据库的运行管理功能、数据库的建立和维护功能。
5.叙述数据库系统的特点:(1).数据结构化;(2) 数据的共享性高,冗余度低,易扩充;(3) 数据独立性高;(4) 数据由DBMS 统一管理和控制6. 数据库管理系统的主要功能有哪些?(1)数据库定义功能:(2) 数据存取功能:(3) 数据库运行管理:(4) 数据库的建立和维护功能。
7. 试述数据模型的概念、数据模型的作用和数据模型的三个要素。
答:数据模型是数据库中用来对现实世界进行抽象的工具,是数据库中用于提供信息表示和操作于段的形式构架。
这些概念精确描述了系统的静态特性、动态特性和完整性约束条件。
因此数据模型通常由数据结构、数据操作和完整性约束三部分组成。
(1)数据结构:是所研究的对象类型的集合,是对系统静态特性的描述。
(2) 数据操作:是指对数据库中各种对象(型)的实例(值)允许进行的操作的集合,包括操作及有关的操作规则,是对系统动态特性的描述。
(完整版)数据库系统基础教程第九章答案
9.3.1a)In the following, we use macro NOT_FOUND as defined in the section.void closestMatchPC() {EXEC SQL BEGIN DECLARE SECTION;char manf, SQLSTATE[6];int targetPrice, /* holds price given by user */float tempSpeed, speedOfClosest;char tempModel[4], modelOfClosest[4];int tempPrice, priceOfClosest;/* for tuple just read from PC & closest price found so far */EXEC SQL END DECLARE SECTION;EXEC SQL DECLARE pcCursor CURSOR FORSELECT model, price, speed FROM PC;EXEC SQL OPEN pcCursor;/* ask user for target price and read the answer into variabletargetPrice *//* Initially, the first PC is the closest to the target price.If PC is empty, we cannot answer the question, and so abort. */EXEC SQL FETCH FROM pcCursorINTO :modelOfClosest, :priceOfClosest, :speedOfClosest;if(NOT_FOUND) /* print message and exit */ ;while(1) {EXEC SQL FETCH pcCursor INTO :tempModel, :tempPrice,:tempSpeed;if(NOT_FOUND) break;if(/*tempPrice closer to targetPrice than is priceOfClosest */){modelOfClosest = tempModel;priceOfClosest = tempPrice;speedOfClosest = tempSpeed;}}/* Now, modelOfClosest is the model whose price is closest totarget. We must get its manufacturer with a single-row select */EXEC SQL SELECT makerINTO :manfFROM ProductWHERE model = :modelOfClosest;printf("manf=%s, model=%d, speed=%d\n",manf, modelOfClosest, speedOfClosest);EXEC SQL CLOSE CURSOR pcCursor;}b)void acceptableLaptop() {EXEC SQL BEGIN DECLARE SECTION;int minRam, minHd, minScreen; /* given by user */float minSpeed;char model[4], maker,float speed;int ram, hd, screen, price;EXEC SQL END DECLARE SECTION;EXEC SQL PREPARE query1 FROM‘ SELECT model, speed, ram, hd, screen, price, maker FROM Laptop l, Product pWHERE speed >= ?AND ram >= ? ANDhd >= ? ANDscreen >= ? ANDl.model = p.model’EXEC SQL DECLARE cursor1 CURSOR FOR query1;/* ask user for minimum speed, ram, hd size, and screen size */EXEC SQL OPEN cursor1 USING :minSpeed, :minRam, :minHd, :minScreen;while(!NOT_FOUND) {EXEC SQL FETCH cursor1 INTO:model, :speed, :ram, :hd, :screen, :price, :maker;if(FOUND){printf("maker:%s, model:%d, \nspeed:%.2f, ram:%d, hd:%d, screen:%d, price:%d\n",maker, model, speed, ram, hd, screen, price);}}EXEC SQL CLOSE CURSOR cursor1;}c)void productsByMaker() {EXEC SQL BEGIN DECLARE SECTION;char maker, model[4], type[10], color[6];float speed;int ram, hd, screen, price;EXEC SQL END DECLARE SECTION;EXEC SQL PREPARE query1 FROM‘ SELECT * FROM PCWHERE model IN (SELECT model FROM ProductWHERE maker = ? ANDtype =‘ pc’ );EXEC SQL PREPARE query2 FROM‘ SELECT * FROM LaptopWHERE model IN (SELECT model FROM ProductWHERE maker = ? ANDtype =‘ laptop’ );EXEC SQL PREPARE query3 FROM‘ SELECT * FROM PrinterWHERE model IN (SELECT model FROM ProductWHERE maker = ? ANDtype =‘ printer’ );EXEC SQL DECLARE cursor1 CURSOR FOR query1;EXEC SQL DECLARE cursor2 CURSOR FOR query2;EXEC SQL DECLARE cursor3 CURSOR FOR query3;/* ask user for manufacturer */Printf(“ maker:%s n” , ma ker);/* get PCs made by the manufacturer */EXEC SQL OPEN cursor1 USING :maker;Printf( “ product type: PC n” );while(!NOT_FOUND) {EXEC SQL FETCH cursor1 INTO:model, :speed, :ram, :hd, :price;if(FOUND){n” , model, speed, ram, hd, price);}}/* get Laptops made by the manufacturer */EXEC SQL OPEN cursor2 USING :maker;Printf(“ product type: Laptop n” );while(!NOT_FOUND) {EXEC SQL FETCH cursor2 INTO:model, :speed, :ram, :hd, :screen, :price;if(FOUND){printf("model:%d, speed:%.2f, ram:%d, hd:%d, screen:%d,price:%d\n", model, speed, ram, hd, screen, price);}}/* get Printers made by the manufacturer */EXEC SQL OPEN cursor3 USING :maker;Printf(“ product type: Printer n”);while(!NOT_FOUND) {EXEC SQL FETCH cursor3 INTO:model, :color, :type, :price;if(FOUND){printf("model:%d, color:%s, type:%s, price:%d\n",model, color, type, price);}}EXEC SQL CLOSE CURSOR cursor1;EXEC SQL CLOSE CURSOR cursor2;EXEC SQL CLOSE CURSOR cursor3;}d)void withinBudget() {EXEC SQL BEGIN DECLARE SECTION;int total_budget, rest_budget, pc_price, printer_price;char pc_model[4], printer_model[4], color[6];float min_speed;EXEC SQL END DECLARE SECTION;EXEC SQL PREPARE query1 FROM‘ SELECT model, price FROM PCWHERE speed >= ? AND price <= ?ORDER BY price’;EXEC SQL PREPARE query2 FROM‘ SELECT model, price FROM PrinterWHERE price <= ? AND color = ?ORDER BY price’;EXEC SQL DECLARE cursor1 CURSOR FOR query1;EXEC SQL DECLARE cursor2 CURSOR FOR query2;/* ask user for budget & the minimum speed of pc *//* get the cheapest PC of the minimum speed */EXEC SQL OPEN cursor1 USING :min_speed, :total_budget;EXEC SQL FETCH cursor1 INTO :pc_model, :pc_price;if (NOT_FOUND)Printf( “ no pc f n” );else{Printf( “ pc model: %s n” , pc_model);}/* get Printer within the budget–pc_price;*/ rest_budget = total_budgetcolor = “ true ”;EXEC SQL OPEN cursor2 USING :rest_budget, :color;EXEC SQL FETCH cursor2 INTO :printer_model;if(NOT_FOUND) {EXEC SQL CLOSE CURSOR cursor2;color =“ false”;EXEC SQL OPEN cursor2 USING :rest_budget, :color;if(NOT_FOUND)n” );printf(“ no printer found within the budgetelse {EXEC SQL FETCH cursor2 INTO :printer_model;printf(“ printer model: %s n” , printer_model);}}else {printf( “ printer model: %s n” , printer_model);}EXEC SQL CLOSE CURSOR cursor1;EXEC SQL CLOSE CURSOR cursor2;}e)void newPCproduct() {EXEC SQL BEGIN DECLARE SECTION;char pmaker, pmodel[4], ptype[6];float pspeed;int pram, phd, pscreen, pprice;int pcount;EXEC SQL END DECLARE SECTION;EXEC SQL PREPARE stmt1 FROM‘ SELECT COUNT(*) INTO :countFROM PCWHERE MODEL = ?;EXEC SQL PREPARE stmt2 FROM‘ INSERT INTO Product VALUES(?, ?, ?) ’;EXEC SQL PREPARE stmt3 FROM‘ INSERT INTO PC VALUES(?, ?, ?, ?, ?) ’;/* ask user for manufacturer, model, speed, RAM, hard-disk,& price of a new PC*/EXEC SQL EXECUTE stmt1 USING :pmodel;IF (count > 0)Printf( “ Warnning: The PC model already exists n” );ELSE{EXEC SQL EXECUTE stmt2 USING :pmaker, :pmodel, :ptype;EXEC SQL EXECUTE stmt3 UINGNG :pmodel, :pspeed, :pram,:phd, :pprice }}9.3.2a)void largestFirepower() {EXEC SQL BEGIN DECLARE SECTION;char cclass[20], maxFirepowerClass[20];int cnumGuns, cbore;float firepower, maxFirepower;EXEC SQL END DECLARE SECTION;EXEC SQL DECLARE cursor1 CURSOR FORSELECT class, numGuns, bore FROM Classes;EXEC SQL OPEN cursor1;EXEC SQL FETCH FROM cursor1 INTO :cclass, :cnumGuns, :cbore;if(NOT_FOUND) /* print message and exit */ ;maxFirepower = cnumGuns * (power (cbore, 3));strcpy(maxFirepowerClass, cclass);while(1) {EXEC SQL FETCH cursor1 INTO :cclass, :cnumGuns, :cbore;if(NOT_FOUND) break;firepower = cnumGuns * (power (cbore, 3));if( firepower > maxFirepower ){maxFirepower = firepower;strcpy(maxFirepowerClass, cclass);}}printf("Class of maximum firepower :%s\n", maxFirepowerClass);EXEC SQL CLOSE CURSOR cursor1;}b)void getCountry() {EXEC SQL BEGIN DECLARE SECTION;char ibattle[20], iresult[10], ocountry[20];char stmt1[200], stmt2[200];EXEC SQL END DECLARE SECTION;strcpy(stmt1,“ SELECT COUNTRY FROM Classes CWHERE C.class IN (SELECT S.class FROM Ships SWHERE IN (SELECT ship FROM OutcomesWHERE battle = ?))” );Strcpy(stm2,“ SELECT country FROM ClassesWHERE class = ( SELECT MAX(COUNT(class))FROM Ships s, Outcomes oWHERE = s.ship ANDs.result =‘ ?’ )” );EXEC SQL PREPARE query1 FROM stmt1;EXEC SQL PREPARE query2 FROM stmt2;EXEC SQL DECLARE cursor1 CURSOR FOR query1;EXEC SQL DECLARE cursor2 CURSOR FOR query2;/* ask user for battle *//* get countries of the ships involved in the battle */EXEC SQL OPEN cursor1 USING :ibattle;while(!NOT_FOUND) {EXEC SQL FETCH cursor1 INTO :ocountry;if(FOUND)n” , ocoutry);}EXEC SQL CLOSE CURSOR cursor1;/* get the country with the most ships sunk */strcpy(iresult,“ sunk” );EXEC SQL OPEN cursor2 USING :iresult;/* loop for the case there ’ s the same max# of ships sunk */While(!NOT_FOUND) {EXEC SQL FETCH cursor2 INTO :ocountry;If(FOUND)Printf(}/* get the country with the most ships damaged */strcpy(iresult, “ damaged ” ); EXEC SQL OPEN cursor2 USING :iresult;/* loop for the case there ’ s the same max# of ships damaged */While(!NOT_FOUND) {EXEC SQL FETCH cursor2 INTO :ocountry;If(FOUND)Printf(}} c)void addShips() {EXEC SQL BEGIN DECLARE SECTION; char iclass[20], itype[3], icontry[20], iship[20]; int inumGuns, ibore, idisplacement, ilaunched; char stmt1[100], stmt2[100]; EXEC SQL END DECLARE SECTION;strcpy(stmt1,“ INSERT INTO Classes VALUES (?, ?, ?, ?, ?, ?)” );strcpy(stmt2,“ INSERT INTO Ships VALUES (?, ?, ?)” );/* ask user for a class and other info for Classes table */EXEC SQL EXECUTE IMMEDATE :stmt1USING :iclass, :itype, :icontry,:inumGuns, :ibore, :idisplacement;/* ask user for a ship and launched */WHILE(there_is_input){“ country with the most ships damaged: %s, ocountry);“ country with the most ships sunk: %s, ocountry);EXEC SQL EXECUTE IMMEDATE :stmt2USING :iship, :iclass, ilaunched;/* ask user for a ship and launched */}}d)void findError() {EXEC SQL BEGIN DECLARE SECTION;char bname[20], bdate[8], newbdate[8];char sname[20], lyear[4], newlyear[4];char stmt1[100], stmt2[100];EXEC SQL END DECLARE SECTION;strcpy(stmt1, strcpy(stmt2, “ UPDATE Battles SET date = ? WHERE name = ?“ UPDATE Ships SET launched = ? WHERE name = ?” );” );EXEC SQL DECLARE C1 CURSOR FORSelect , b.date, , unchedFROM Battles b, Outcomes o, Ships sWHERE = o.battle ANDo.ship = ANDYEAR(b.date) < unched;EXEC SQL OPEN C1;while(!NOT_FOUND) {EXEC SQL FETCH C1 INTO :bname, :bdate, :sname, :lyear;/* prompt user and ask if a change is needed */if(change_battle){/* get a new battle date to newbdate */EXEC SQL EXECUTE IMMEDATE :stmt1USING :bname, :newbdate;}if(change_ship){/* get a new launched year to newlyear */EXEC SQL EXECUTE IMMEDATE :stmt2USING :sname, :newlyear;}}}9.4.1a)CREATE FUNCTION PresNetWorth(studioName CHAR[15]) RETURNS INTEGER DECLARE presNetWorth INT;BEGINSELECT netWorthINTO presNetWorthFROM Studio, MovieExecWHERE = studioName AND presC# = cert#;RETURN(presNetWorth);END;b)CREATE FUNCTION status(person CHAR(30), addr CHAR(255)) RETURNS INTEGERDECLARE isStar INT;DECLARE isExec INT;BEGINSELECT COUNT(*)INTO isStarFROM MovieStarWHERE = person AND MovieStar.address = addr;SELECT COUNT(*)INTO isExecFROM MovieExecWHERE = person AND MovieExec.address = addr;IF isStar + isExec = 0 THEN RETURN(4) ELSE RETURN(isStar +2*isExec)END IF;END;c)CREATE PROCEDURE twoLongest(IN studio CHAR(15),OUT longest VARCHAR(255),OUT second VARCHAR(255))DECLARE t VARCHAR(255);DECLARE i INT;DECLARE Not_Found CONDITION FOR SQLSTATE = '02000';DECLARE MovieCursor CURSOR FORSELECT title FROM Movies WHERE studioName = studioORDER BY length DESC;BEGINSET longest = NULL;SET second = NULL;OPEN MovieCursor;SET i = 0;mainLoop: WHILE (i < 2) DOFETCH MovieCursor INTO t;IF Not_Found THEN LEAVE mainLoop END IF;SET i = i + 1;END WHILE;CLOSE MovieCursor;END;d)CREATE PROCEDURE earliest120mMovie(IN star CHAR(30),OUT earliestYear INT)DECLARE Not_Found CONDITION FOR SQLSTATE = '02000'; DECLARE MovieCursor CURSOR FORSELECT MIN(year) FROM MoviesWHERE length > 120 ANDtitle IN (SELECT movieTitle FROM StarsInWHERE starName = star);BEGINSET earliestYear = 0;OPEN MovieCursor;FETCH MovieCursor INTO earliestYear;CLOSE MovieCursor;END;e)CREATE PROCEDURE uniqueStar(IN addr CHAR(255),OUT star CHAR(30))BEGINSET star = NULL;IF 1 = (SELECT COUNT(*) FROM MovieStar WHERE address = addr) THENSELECT name INTO star FROM MovieStar WHERE address = addr; END;f)CREATE PROCEDURE removeStar(IN star CHAR(30))BEGINDELETE FROM Movies WHERE title IN(SELECT movieTitle FROM StarsIn WHERE starName = star); DELETE FROM StarsIn WHERE starName = star;DELETE FROM MovieStar WHERE name = star;END;9.4.2a)CREATE FUNCTION closestMatchPC(targetPrice INT) RETURNS CHAR DECLARE closestModel CHAR(4);DECLARE diffSq INT;DECLARE currSq INT;DECLARE m CHAR(4);DECLARE p INT;DECLARE Not_Found CONDITION FOR SQLSTATE '02000'; DECLARE PCCursor CURSOR FORSELECT model, price FROM PC;BEGINSET closestModel = NULL;SET diffSq = -1;OPEN PCCursor;mainLoop: LOOPFETCH PCCursor INTO m, p;IF Not_Found THEN LEAVE mainLoop END IF;SET currSq = (p - targetPrice)*(p - targetPrice);IF diffSq = -1 OR diffSq > currSqTHEN BEGINSET closestModel = m;SET diffSq = currSq;END IF;END LOOP;CLOSE PDCursor;RETURN(closestModel);END;b)CREATE FUNCTION getPrice(imaker CHAR(1), imodel CHAR(4))RETURNS INTEGERDECLARE ptype VARCHAR(10);DECLARE pprice INT;DECLARE Not_Found CONDITION FOR SQLSTATE '02000';BEGINSELECT type INTO ptype FROM ProductWHERE maker = imaker AND model = imodel;IF ptype =‘ pc’ THENSELECT price INTO pprice FROM PCWHERE model = imodel;ELSE IF ptype =‘ laptop’ THENSELECT price INTO pprice FROM LaptopWHERE model = imodel;ELSE IF ptype =‘ printer’ THENSELECT price INTO pprice FROM PrinterWHERE model = imodel;ELSEpprice = NULL;END IF;RETURN (pprice);END;c)CREATE PROCEDURE addPC(IN imodel INT,IN ispeed DECIMAL(3,2),IN iram INT,IN ihd INT,IN iprice INT)DECLARE Already_Exist CONDITION FOR SQLSTATE '02300';BEGININSERT INTO PC VALUES(imodel, ispeed, iram, ihd, iprice); WHILE (Already_Exist) DOSET imodel = imodel + 1;INSERT INTO PC VALUES(imodel, ispeed, iram, ihd, iprice); END WHILE;END;d)CREATE PROCEDURE getNumOfHigherPrice(IN iprice INT,OUT NumOfPCs INT,OUT NumOfLaptops INT,OUT NumOfPrinters INT)BEGINSET NumOfPCs = 0;SET NumOfLaptops = 0;SET NumOfPrinters = 0;SELECT COUNT(*) INTO NumOfPCs FROM PCWHERE price > iprice;SELECT COUNT(*) INTO NumOfLaptops FROM Laptop WHERE price > iprice;SELECT COUNT(*) INTO NumOfPrinters FROM PrinterWHERE price > iprice;END;9.4.3a)CREATE FUNCTION getFirepower(iclass VARCHAR(10)) RETURNS INTEGER DECLARE firepower INT;DECLARE nguns INT;DECLARE nbore INT;BEGINSELECT numGuns, bore INTO nguns, nbore FROM ClassesWHERE class = iclass;SET firepower = nguns * (nbore * nbore * nbore);RETURN(firepower);END;b)CREATE PROCEDURE twoCountriesInBattle(IN ibattle VARCHAR(20),OUT firstCountry VARCHAR(20),OUT secondCountry VARCHAR(20))DECLARE i INT;DECLARE ocountry VARCHAR(20);DECLARE classCursor CURSOR FORSELECT country FROM ClassesWHERE class IN(SELECT class FROM ShipsWHERE name IN(SELECT ship FROM OutcomesWHERE battle = ibattle));BEGINSET firstCountry = NULL;SET secondCountry = NULL;SET i = 0;IF 2 = (SELECT COUNT(*) count FROM ClassesWHERE class IN(SELECT class FROM ShipsWHERE name IN(SELECT ship FROM OutcomesWHERE battle = ibattle)))THENOPEN classCursor;WHILE (i < 2) DOFETCH classCursor INTO ocountry;IF (i = 0) THENSET firstCountry = ocountry;ELSESET secoundCountry = ocountry;END IF;END WHILE;END IF;CLOSE calssCursor;END;c)CREATE PROCEDURE addClass(IN iship VARCHAR(20),IN iclass VARCHAR(20),IN itype CHAR(2),IN icountry VARCHAR(20),IN inumGuns INT,IN ibore INT,IN idisplacement INT)BEGININSERT INTO Classes VALUES(iclass, itype, icountry,inumGuns, ibore, idisplacement); INSERT INTO Ships VALUES(iship, iclass, NULL);END;d)CREATE PROCEDURE checkLaunched(IN ship VARCHAR(20))DECLARE bname VARCHAR(20);BEGINIF EXIST (SELECT INTO bnameFROM Battles b, Outcomes o, Ships sWHERE = o.battle ANDo.ship = ANDYEAR(b.date) < unched)THENUPDATE Ships SET launced = 0 WHERE name = iship;UPDATE Battles SET date = 0 WHERE name = bname; END IF;END9.4.49.5.1a)#include sqlcli.hSQLHENV myEnv;SQLHDBC mycon;SQLHSTMT execStat;SQLRETURN errCode1, errCode2, errCode3;SQLCHAR manf, tempModel[4];SQLFLOAT tempSpeed;SQLINTEGER tempPrice;SQLINTEGER colInfo;Int targetPrice;char modelOfClosest[4];float speedOfClosest;int priceOfClosest;/* ask user for target price and read the answer into variabletargetPrice*/errCode1 = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &myEnv);if(errCode1) {printf( ” Error for SQL_HANDLE_ENV. n” );exit(1);}errCode2 = SQLAllocHandle(SQL_HANDLE_DBC, myEnv, &myCon);if(errCode2) {printf( ” Error for SQL_ HANDLE_DBC. n” );exit(1);}errCode3 = SQLAllocHandle(SQL_HANDLE_STMT, myCon, &execStat);if(errCode3) {printf( ” Error for SQL_ HANDLE_STMT. n” );exit(1);}SQLExecDirect(execStat, “ SELECT model, price, speed FROM PC ” , SQL_NTS);SQLBindCol(execStat, 1, SQL_CHAR, tempModel,sizeof(tempModel), &colInfo);SQLBindCol(execStat, 2, SQL_INTEGER, tempPrice,sizeof(tempPrice), &colInfo);SQLBindCol(execStat, 3, SQL_FLOAT, tempSpeed,sizeof(tempSpeed), &colInfo);priceOfClosest = NULL;while(SQLFetch(execStat) != SQL_NO_DATA) {if( /* the 1st fetch or tempPrice closer to targetPrice */modelOfClosest = tempModel;priceOfClosest = tempPrice;speedOfClosest = tempSpeed;}}/* Now, modelOfClosest is the model whose price is closest totarget. We must get its manufacturer with a single-row select*/if (priceOfClosest == NULL ) /* no data fetched *//* print error message and exit */SQLPrepare (execStat,“ SELECT maker FROM Product WHERE model = ? ” , SQL_NTS); SQLBindParameter(execStat, 1,⋯,modelOfClosest,⋯);SQLExecute(execStat);SQLBindCol(execStat, 1, SQLCHAR, &manf, sizeof(manf), &colInfo);/* print manf */b)#include sqlcli.hSQLHENV myEnv;SQLHDBC mycon;SQLHSTMT execStat;SQLRETURN errCode1, errCode2, errCode3;SQLCHAR model[4], maker;SQLFLOAT minSpeed;SQLINTEGER minRam, minHd, minScreen;SQLFLOAT speed;SQLINTEGER ram, hd, screen;SQLINTEGER colInfo;/* ask user for minimum speed, ram, hd size, and screen size */errCode1 = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &myEnv);if(errCode1) {printf( ” Error for SQL_HANDLE_ENV. n” );exit(1);}errCode2 = SQLAllocHandle(SQL_HANDLE_DBC, myEnv, &myCon);if(errCode2) {printf( ” Error for SQL_ HANDLE_DBC. n” );exit(1);}errCode3 = SQLAllocHandle(SQL_HANDLE_STMT, myCon, &execStat);if(errCode3) {printf( ” Error for SQL_ HANDLE_STMT. n” );exit(1);}SQLPrepare(execStat,“ SELECT model, speed, ram, hd, screen, price, maker“ FROM Laptop l, Product p”||“ WHERE speed >= ? AND ” ||“ ram >= ? AND”||“ hd >= ? AND”||“ screen >= ? AND”||“ l.model = p.model”,”||SQL_NTS);SQLBindParameter(execStat, 1, SQL_FLOAT, ⋯ , minSpeed, ⋯ ); SQLBindParameter (execStat, 2, SQL_INTEGER, ⋯ , minRam, ⋯ );SQLBindParameter (execStat, 3, SQL_ SQLBindParameter (execStat, 4, SQL_ INTEGER,INTEGER,⋯ , minHd, ⋯ );⋯ , minScreen, ⋯ );SQLExecute(execStat);SQLBindCol(execStat, 1, SQL_CHAR, model, sizeof(model), &colInfo); SQLBindCol(execStat, 2, SQL_FLOAT, speed,sizeof(speed), &colInfo);SQLBindCol(execStat, 3, SQL_INTEGER, ram,sizeof(ram), &colInfo);SQLBindCol(execStat, 4, SQL_INTEGER, hd,sizeof(hd), &colInfo);SQLBindCol(execStat, 5, SQL_INTEGER, screen,sizeof(screen), &colInfo);SQLBindCol(execStat, 6, SQL_INTEGER, price,sizeof(price), &colInfo);SQLBindCol(execStat, 7, SQL_CHAR, maker,sizeof(maker), &colInfo);while(SQLFetch(execStat) != SQL_NO_DATA) {if( FOUND )/* print fetched info */}c)#include sqlcli.hSQLHENV myEnv;SQLHDBC mycon;SQLHSTMT execStat;SQLRETURN errCode1, errCode2, errCode3;SQLCHAR maker, model[4], type[10], color[6];SQLFLOAT speed;SQLINTEGER ram, hd, screen, price;SQLINTEGER colInfo;/* ask user for minimum speed, ram, hd size, and screen size */errCode1 = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &myEnv); if(errCode1) {printf( ” Error for SQL_HANDLE_ENV. n” );exit(1);}errCode2 = SQLAllocHandle(SQL_HANDLE_DBC, myEnv, &myCon);if(errCode2) {printf( ” Error for SQL_ HANDLE_DBC.n” );exit(1);}errCode3 = SQLAllocHandle(SQL_HANDLE_STMT, myCon, &execStat);if(errCode3) {printf( ” Error for SQL_ HANDLE_STMT.n” );exit(1);}/* get PCs made by the manufacturer */SQLPrepare(execStat,“ SELECT * FROM PC WHERE model IN ( ” ||“ SELECT model FROM Product ” ||“ WHERE maker = ? AND ” ||“ type = ‘ pc’”, SQL_NTS);SQLBindParameter(execStat, 1, SQL_CHAR,⋯, maker,⋯); SQLExecute(execStat);SQLBindCol(execStat, 1, SQL_CHAR, model, sizeof(model), &colInfo); SQLBindCol(execStat, 2, SQL_FLOAT, speed,sizeof(speed), &colInfo);SQLBindCol(execStat, 3, SQL_INTEGER, ram,sizeof(ram), &colInfo);SQLBindCol(execStat, 4, SQL_INTEGER, hd,sizeof(hd), &colInfo);SQLBindCol(execStat, 5, SQL_INTEGER, price,sizeof(price), &colInfo);while(SQLFetch(execStat) != SQL_NO_DATA) {if( FOUND )/* print fetched info */}/* get Laptops made by the manufacturer */SQLPrepare(execStat,“ SELECT * FROM Laptop WHERE model IN ( ” ||“ SELECT model FROM Product ” ||“ WHERE maker = ? AND ” ||“ type = ‘ laptop ’”, SQL_NTS);SQLBindParameter(execStat, 1, SQL_CHAR,⋯, maker,⋯); SQLExecute(execStat);SQLBindCol(execStat, 1, SQL_CHAR, model, sizeof(model), &colInfo);SQLBindCol(execStat, 2, SQL_FLOAT, speed,sizeof(speed), &colInfo);SQLBindCol(execStat, 3, SQL_INTEGER, ram,sizeof(ram), &colInfo);SQLBindCol(execStat, 4, SQL_INTEGER, hd,sizeof(hd), &colInfo);SQLBindCol(execStat, 5, SQL_INTEGER, screen,sizeof(screen), &colInfo);SQLBindCol(execStat, 6, SQL_INTEGER, price,sizeof(price), &colInfo);while(SQLFetch(execStat) != SQL_NO_DATA) {if( FOUND )/* print fetched info */}/* get Printers made by the manufacturer */SQLPrepare(execStat,“ SELECT * FROM Printer WHERE model IN (”||“ SELECT model FROM Product”||“ WHERE maker = ? AND ” ||“ type =‘printer’”,SQL_NTS);SQLBindPara meter(execStat, 1, SQL_CHAR,⋯, maker,⋯);SQLExecute(execStat);SQLBindCol(execStat, 1, SQL_CHAR, model, sizeof(model), &colInfo);SQLBindCol(execStat, 2, SQL_CHAR, color, sizeof(color), $colInfo);SQLBindCol(execStat, 3, SQL_CHAR, type, sizeof(type), $colInfo);SQLBindCol(execStat, 4, SQL_INTEGER, price, sizeof(price), &colInfo);d)#include sqlcli.hSQLHENV myEnv;SQLHDBC mycon;SQLHSTMT execStat;SQLRETURN errCode1, errCode2, errCode3;SQLINTEGER total_budget, rest_budget, pc_price, printer_price;SQLCHAR pc_model[4], printer_model[4], color[6];SQLFLOAT min_speed;errCode1 = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &myEnv);if(errCode1) {printf( ” Error for SQL_HANDLE_ENV.n” );exit(1);}errCode2 = SQLAllocHandle(SQL_HANDLE_DBC, myEnv, &myCon);if(errCode2) {printf( ” Error for SQL_ HANDLE_DBC.n” );exit(1);}errCode3 = SQLAllocHandle(SQL_HANDLE_STMT, myCon, &execStat);if(errCode3) {printf( ” Error for SQL_ HANDLE_STMT. n” );exit(1);}SQLPrepare(execStat,“SELECT model, price FROM PCWHERE speed >= ? AND price <= ? ORDERBY price ”,SQL_NTS);/* ask user for budget & the minimum speed of pc *//* get the cheapest PC of the minimum speed */SQLBindParameter(execStat, 1, SQL_FLOAT , ⋯ ,min_speed , ⋯ ); SQLBindParameter(execStat, 2, SQL_INTEGER, ⋯ , total_budget, ⋯ );SQLExecute(execStat);SQLBindCol(execStat, 1, SQL_CHAR, pc_model, sizeof(pc_model),&colInfo);SQLBindCol(execStat, 2, SQL_INGETER, pc_price,sizeof(pc_price),&colInfo);SQLFetch(execStat);if (NOT_FOUND) {p rintf(“no pc found within the budget n” );}else {p rintf( “ pc model: %s n” , pc_model);}/* get Printer within the budget */–pc_price;rest_budget = total_budgetcolor =“true”;SQLPrepare(execStat,“SELECT model, price FROM PrinterWHERE price <= ? AND color = ?ORDER BY price ” , SQL_NTS);SQLBindParameter(execStat, 1, SQL_INTEGER , ⋯ , rest_budget , ⋯ ); SQLBindParameter(execStat, 2, SQL_CHAR, ⋯ , color , ⋯ );SQLExecute(execStat);SQLBindCol(execStat, 1, SQL_CHAR, print_model,sizeof(print_model),&colInfo);SQLBindCol(execStat, 2, SQL_INGETER, print_price,sizeof(print_price),&colInfo);SQLFetch(execStat);if(NOT_FOUND) {color =“false”;SQLBindParameter(execStat, 1, SQL_INTEGER,⋯, rest_budget,⋯);SQLBindParameter(execStat, 2, SQL_CHAR,⋯, color,⋯);SQLExecute(execStat);SQLBindCol(execStat, 1, SQL_CHAR, print_model,sizeof(print_model),&colInfo);SQLBindCol(execStat, 2, SQL_INGETER, print_price,sizeof(print_price),&colInfo);SQLFetch(execStat);if(NOT_FOUND)printf( “ no printer found within the budget n” );elseprintf( “ printer model: %s n” , printer_model);}elseprintf( “ printer model: %s n” , printer_model);}e)#include sqlcli.hSQLHENV myEnv;SQLHDBC mycon;SQLHSTMT execStat;SQLRETURN errCode1, errCode2, errCode3;SQLCHAR pmodel[4], pmaker, ptype[6];SQLFLOAT pspeed;SQLINTEGER pram, phd, pscreen, pprice, count;SQLINTEGER colInfo;/* ask user for minimum speed, ram, hd size, and screen size */errCode1 = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &myEnv);if(errCode1) {printf( ” Error for SQL_HANDLE_ENV.n” );exit(1);}errCode2 = SQLAllocHandle(SQL_HANDLE_DBC, myEnv, &myCon);if(errCode2) {printf( ” Error for n” );exit(1);}errCode3 = SQLAllocHandle(SQL_HANDLE_STMT, myCon, &execStat);if(errCode3) {printf( ” Error for SQL_ HANDLE_STMT. n” );exit(1);}/* ask user for manufacturer, model, speed, RAM, hard-disk, *//* & price of a new PC */SQLPrepare(execStat,“ SELECT COUNT(*) FROM PC WHERE model = ?”, SQL_NTS);SQLBindParameter(execStat, 1, SQL_CHAR,⋯, pmodel,⋯);SQLExecute(execStat);SQLBindCol(execStat, 1, SQL_INTEGER, count, sizeof(count), &colInfo);SQLFetch(execStat);if (count >0){ Printf( “ Warnning: The PC model already exists n” ); }else {” , SQLPrepare(execStat,“ INSERT INTO Product VALUES(?, ?, ?)SQL_NTS);SQLBindParame ter(execStat, 1, SQL_CHAR,⋯, pmaker,⋯);SQLBindParameter(execStat, 2, SQL_CHAR,⋯, pmodel,⋯);SQLBindParameter(execStat, 3, SQL_CHAR,⋯, ptype,⋯); SQLExecute(execStat);” , SQLPrepare(execStat,“ INSERT INTO PC VALUES(?, ?, ?, ?, ?)SQL_NTS);SQLBindParameter(execStat, 1, SQL_CHAR,⋯, pmodel,⋯);SQLBindParameter(execStat, 2, SQL_FLOAT,⋯, pspeed,⋯);SQLBindParameter(execStat, 3, SQL_INTEGER,⋯, pram,⋯); SQLBindParameter(e xecStat, 4, SQL_INTEGER,⋯, phd,⋯);SQLBindParameter(execStat, 5, SQL_INTEGER,⋯, pprice,⋯); SQLExecute(execStat);}9.5.2a)#include sqlcli.hSQLHENV myEnv;SQLHDBC mycon;SQLHSTMT execStat;SQLRETURN errCode1, errCode2, errCode3;SQLCHAR cclass[20], maxFirepowerClass[20];SQLFLOAT firepower, maxFirepower;SQLINTEGER cnumGuns, cbore;。
数据库系统与应用课后习题答案
第九章数据库应用设计方法1.试述数据库设计的基本过程。
答:数据库设计过程通常包括六个阶段: ( l )需求分析; ( 2 )概念结构设计; ( 3 )逻辑结构设计及优化; ( 4 )数据库物理设计; ( 5 )数据库实现; ( 6 )数据库运行和维护。
这是一个完整的实际数据库及其应用系统的设计过程。
设计一个完善的数据库应用系统往往是上述六个阶段的不断反复。
2.简述需求分析的步骤。
答:一般来说,需求分析工作可分为需求调研、需求分析、需求规范说明书编制和需求验证4个步骤。
1)需求调研是通过了解用户的组织机构情况、了解用户各部门的业务活动情况、确定系统边界等工作完成用户需求的收集、调查。
2)需求分析。
完成对用户活动的调查分析后,还需要进一步分析和抽象用户的需求,使之转换为后续各设计阶段可用的形式。
具体来说就是用户对数据库应用系统的各种需求,包括用户对数据信息存储的需求、数据信息的处理需求、业务数据流需求等。
需求分析的方法主要包括原型化方法、结构化方法及数据流分析方法等。
3)需求规范说明书编制。
需求规范说明书阐述数据库应用系统所必须提供的功能和性能要求,以及运行的实际约束条件。
需求规范说明书以书面方式记录用户与开发方所达成的产品需求协议条款,不仅是用户对最终产品的接受基础,也是开发方在进行设计、实现与测试运行的规范。
4)需求验证。
需求验证主要包括有效性验证、一致性验证和完备性验证。
3.数据字典的内容是什么?答:数据字典存放了系统所用到的数据信息,通常数据字典包含了5个基本组成部分:数据项、数据结构、数据流、数据存储和处理过程。
1)数据项。
数据项记录了数据对象的基本信息,是不可再分的基本数据单位,描述了数据的静态特性。
数据项包含了对数据对象的区分数据对象完整性、一致性约束的描述。
2)数据结构。
数据结构反映了数据之间的组合关系,也可以是由多个数据结构的复合。
3)数据流。
数据流是对数据动态特性的描述,表示了数据结构沿着系统的事务和处理过程中的传输流向。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第九章 SQL Server数据库简单应用一、单选题1.使用“CREATE DATABASE AAA”命令所建立数据库文件的初始大小是(A)字节。
A. 1MB. 2MC. 3MD. 4M2.下面关于索引的描述不正确的是(B)。
A. 索引是一个指向表中数据的指针B. 索引是在列上建立的一种数据库对象C. 索引的建立和撤消对表的数据毫无影响D. 表的建立和撤消对索引毫无影响3.下面关于聚集索引和非聚集索引说法正确的是(B)。
A. 每个表只能建立一个非聚集索引B. 非聚集索引需要较多的硬盘空间和内存C. 一张表上不能同时建立聚集和非聚集索引D. 一个复合索引只能是聚集索引4.“Create Unique Index AAA On 学生表(学号)”将在学生表上创建名为AAA的(A)。
A. 惟一索引B. 聚集索引C. 复合索引D. 唯一聚集索引5.下列标识符可以作为局部变量使用(C)。
A. [@Myvar]B. My varC. @MyvarD. @My var6.Transact SQL支持的程序结构语句主要有(A)。
A. Begin…EndB. If…Then…ELSEC. Do CaseD. Do While7.属于事务控制的语句是(A)。
A. Begin Tran、Commit、RollBackB. Begin、Continue、EndC. Create Tran、Commit、RollBackD. Begin Tran、Continue、End8.SQL Server触发器主要针对下列语句创建(B)。
A. SELECT、INSERT、DELETEB. INSERT、UPDATE、DELETEC. SELECT、UPDATE、INSERTD. INSERT、UPDATE、CREATE9.下面关于索引的描述不正确的是(B)。
A. 索引是一个指向表中数据的指针B. 索引是在元组上建立的一种数据库对象C. 索引的建立和撤消对表中的数据毫无影响D. 表被撤消时将同时撤消在其上建立的索引10.以下哪种情况应尽量创建索引(A)。
A. 在where子句中出现频率较高的列B. 具有很多NULL值的列C. 记录较少的基本表D. 需要更新频繁的基本表11.SQL Server2000提供的单行注释语句是使用(B)开始的一行内容。
A. “/*”B. “--”C. “{”D. “/”12.不属于SQL Server2000系统全局变量的是(D)。
A. @@ErrorB. @@ConnectionsC. @@Fetch_StatusD. @Records13. 下列SQL Server2000语句中出现语法错误的是(D)。
A. DECLARE @Myvar INTB. SELECT * FROM [AAA]C. CREATE DATABASE AAAD. DELETE * FROM AAA14.索引是在基本表的列上建立的一种数据库对象,它同基本表分开存储,使用它能够加快数据的(D)速度。
A. 插入B. 修改C. 删除D. 查询15.下列命令不能执行的是(B)。
A. SELECT * FROM [select]B. SELECT * FROM @MyTableC. SELECT * FROM [MyTable]D. SELECT * FROM MyTable二、填空题1.在SQL Server中主要是通过(查询分析器)实用工具运行Transact SQL语句。
2.SQL Server可以通过查询分析器和(企业管理器)两种工具完成数据库的管理工作。
3.在一个已存在数据的表中增加一列,一定要保证所增加的列允许(Null)值。
4.Transact-SQL语句中将日期时间型数据类型作为(字符)型处理,需要用单引号括起来。
5.可以将视图理解为一组存储在SQL Server数据库中的经过预编译的(SELECT)语句。
6.SQL Server中引入索引主要是为了(提高查询的效率),保证数据的惟一性并加快表的查询速度。
7.索引一经创建就完全由SQL Server2000系统(自动)选择和维护。
8.从是否改变基本表记录的物理位置角度可将索引分为(聚集)和(非聚集索引)两类。
9.注释是一些说明性的文字,不是(可执行)语句,不参与程序的编译。
10.一个局部变量的使用范围局限于(批处理)内,即两个GO语句之间的那一部分。
11.触发器是一种特殊的(存储过程),基于表而创建,主要用来保证数据的完整性。
12.在一个表中最多只能有一个关键字为(PRIMARY KEY)的约束,关键字为FOREIGN KEY的约束可以出现(多)次。
13.CHECK约束被称为(检查)约束,UNIQUE约束被称为(唯一值)约束。
14.使用一种约束时,可以使用关键字(CONSTRAINT)和标识符(<约束名>)的选项命名该约束,也可以省略该选项由系统自动命名,因为用户很少再使用其约束名。
15. 当一个表带有约束后,执行对表的各种(更新)操作时,将自动(检查)相应的约束,只有符合约束条件的合法操作才能被真正执行。
16. 在SQL Server2000中,数据库的安全机制分为4个等级,分别为客户端(操作系统)的安全、数据库的(登录)安全、数据库使用安全和数据库对象的使用安全。
17. 数据库的安全管理问题归结为对(锁)和(钥匙)的管理问题。
18. 要访问SQL Server2000数据库服务器,用户必须提供正确的(登录账号)和(口令)。
19. 对用户授予和收回数据库操作的语句关键字分别为(GRANT)和(REVOKE)。
20. 在授予用户访问权限的语句中,所给表名选项以关键字(ON)开始,所给用户名选项以关键字(TO)开始。
21. 在收回用户访问权限的语句中,所给表名选项以关键字(ON)开始,所给用户名选项以关键字(FROM)开始。
22. 使用游标取数和释放游标的语句关键字分别为(FETCH)和(DEALLOCATE)。
23. 打开和关闭游标的语句关键字分别为(OPEN)和(CLOSE)。
24. 判断使用FETCH语句读取数据是否成功的全局变量为(@@FETCH_STATUS)。
25. 使用游标对基本表进行修改和删除操作的语句中,WHERE选项的格式为“WHERE (CURRENT) OF (<游标名>)。
26. 每次执行使用游标的取数、修改或(删除)操作的语句时,能够对表中的(单)个记录进行操作。
27. 在SQL Server2000中,一个事务是一个(并发控制)的单位,它把必须同时执行或不执行的一组操作(捆绑)在一起。
28. 在SQL Server2000中,一个事务处理控制语句以关键字(BEGIN TRAN)开始,以关键字(COMMIT [TRAN])或(ROLLBACK [TRAN])结束。
29.每个存储过程可以包含(多)条Transact-SQL语句,可以在过程体中的任何地方使用(RETURN)语句结束过程的执行,返回到调用语句后的位置。
30. 建立一个存储过程的语句关键字为(CREATE PROC),执行一个存储过程的语句关键字为(EXEC)。
31. 在一个存储过程定义的AS关键字前可以定义该过程的(参数),AS关键字之后为该过程的(过程体)。
32.触发器是一种特殊的存储过程,它可以在对一个表上进行(插入)、(删除)和(更新)操作中的任一种或几种操作时被自动调用执行。
33. 单行或行尾注释的开始标记为(--),多行注释的开始标记为(/*),结束标记为(*/)。
34. 局部变量的开始标记为(@),全局变量的开始标记为(@@)。
35. 每条(SELECT)语句能够同时为多个变量赋值,每条(SET)语句只能为一个变量赋值。
36. 定义局部变量的语句关键字为(DECLARE),被定义的各变量之间必须用(逗号)字符分开。
37. 在SQL Server2000中,每个程序块的开始标记为关键字(BEGIN),结束标记为关键字(END)。
38. 在SQL Server2000中,前后相邻的语句之间可以使用(空格)、(分号)或(换行)字符分开。
39. 在SQL Server2000中,CASE结构是一个(函数),只能作为一个(表达式)使用在另一个语句中。
40. 在SQL Server2000中,CASE函数具有(2)种格式,每种格式中可以带有(多)个WHEN选项,可以带有(一)个ELSE选项。
41. 在条件结构的语句中,关键字IF和ELSE之间和ELSE之后,可以使用(单条)语句,也可以使用具有(BEGIN…END)格式的语句块。
42. 在循环结构的语句中,当执行到关键字(BREAK)后将终止整个语句的执行,当执行到关键字(CONTINUE)后将结束一次循环体的执行。
43. 在SQL Server2000中,打开一个数据库使之成为当前库,有(2)种方法,其中之一使用的命令关键字为(USE)。
44. 索引可以由系统根据约束条件自动建立,也可以由用户通过命令或菜单方式建立,但它的(打开)和(重建)将根据需要由系统自动实现,无须用户过问。
45. 索引是在基本表的列上建立的一种数据库对象,它同基本表分开存储,使用它将降低数据的(插入)、(修改)、(删除)速度。
46. 基本表中的记录数越(多),每条记录占用的字节数越(多)时,使用索引就越有利。
47. 创建索引的命令关键字为(CREATE INDEX),删除索引的命令关键字为(DROP INDEX)。
48. 在索引命令中使用关键字CLUSTERED或NOCLUSTERED分别表示将建立的是(聚集)或(非聚集)索引。
49. 在基本表的某个列上建立索引,可以使基本表中的所有记录按该列值的(升序)或(降序)排列。
50. 当指定基本表中某一列或若干列为主码时,则系统将在这些列上自动建立一个(非空)、(唯一)和(聚集)的索引。
51. 当指定基本表中某一列或若干列为UNIQUE约束时,则系统将在这些列上自动(建立)一个唯一值(索引)。
52. 若规定基本表中某一列或若干列为非空和唯一值双重约束,则这些列就是该基本表的(备用)码,若只规定为唯一值约束,则(不允许)空值重复出现。
53.使用create database命令定义一个数据库,包括定义(数据)文件和(日志)文件两个部分。
54.使用create database命令定义一个数据库,定义其数据文件以关键字(ON)开始,定义日志文件以关键字(LOG ON)开始。
55.SQL Server2000支持两种形式的变量,即(局部变量)和(全局变量)。
56.SQL Server2000中为局部变量赋值的语句是(SELECT)和(SET)。
57.聚集索引与非聚集索引相比,查询速度更(快)。