数据库基础
维护数据库的完整性、一致性、你喜欢用触发器还是自写业务逻辑,为什么
答:尽可能用约束(包括CHECK、主键、唯一键、外键、非空字段)实现,这种方式的效率最好;其次用触发器,这种方式可以保证无论何种业务系统访问数据库都能维持数据库的完整性、一致性;最后再考虑用自写业务逻辑实现,但这种方式效率最低、编程最复杂,当为下下之策。
什么是事务,什么是锁
答:事务是指一个工作单元,它包含了一组数据操作命令,并且所有的命令作为一个整体一起向系统提交或撤消请求操作,即这组命令要么都执行,要么都不执行。事务是作为一个逻辑单元执行的一系列操作,一个逻辑工作单元必须有四个属性,称为 ACID(原子性、一致性、隔离性和持久性)属性,只有这样才能成为一个事务:
(1) 原子性
事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。
(2) 一致性
事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构(如 B 树索引或双向链表)都必须是正确的。
(3) 隔离性
由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。这称为可串行性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事务执行的状态相同。
(4) 持久性
事务完成之后,它对于系统的影响是永久性的。该修改即使出现系统故障也将一直保持。
锁是在多用户环境中对数据的访问的限制。SqlServer自动锁定特定记录、字段或文件,防止用户访问,以维护数据安全或防止并发数据操作问题,锁可以保证事务的完整性和并发性。
什么是索引,有什么优点
答:索引象书的目录类似,索引使数据库程序无需扫描整个表,就可以在其中找到所需要的数据,索引包含了一个表中包含值的列表,其中包含了各个值的行所存储的位置,索引可以是单个或一组列,索引提供的表中数据的逻辑位置,合理划分索引能够大大提高数据库性能。
什么是视图,有什么优点
答:视图是一种虚拟表,虚拟表具有和物理表相同的功能,可以对虚拟表进行增删改查操作,视图通常是一个或多个表的行或列的子集,视图的结果更容易理解(修改视图对基表不影响),获取数据更容易(相比多表查询更方便),限制数据检索(比如需要隐藏某些行或列),维护更方便。
游标是什么?
游标对查询出来的结果集作为一个单元来有效的处理,游标可以定位在结果集的特定行、从结果集的当前位置检索一行或多行、可以对结果集中当前位置进行修改
什么是存储过程,有什么优点
答:存储过程是一组予编译的SQL语句,在一次编译后可以执行多次。因为不必重新编译SQL语句,所以执行存储过程可以提高性能。它的优点有1.允许模块化程序设计,就是说只需要创建一次过程,以后在程序中就可以调用该过程任意次。2.允许更快执行,如果某操作需要执行大量SQL语句或重复执行,存储过程比SQL语句执行的要快。3.减少网络流量,例如一个需要数百行的SQL代码的操作有一条执行语句完成,不需要在网络中发送数百行代码。4.更好的安全机制,对于没有权限执行存储过程的用户,也可授权他们执行存储过程。
什么是触发器,有什么优点
答:出发器是一种特殊类型的存储过程,触发器主要通过事件触发而被执行的,不由用户直接调用。创建触发器时会对其进行定义,以便在对特定表或列作特定类型的数据修改时执行。触发器的优点:1.强化约束,触发器能够提供比CHECK约束。2.跟踪变化,触发器可以跟踪数据库内的操作,从而不允许未经允许许可的更新和变化。3.联级运算,比如某个表上的触发器中包含对另一个表的数据操作,而该操作又导致该表上的触发器被触发
数据库面试题
通俗地理解三个范式
答案:通俗地理解三个范式,对于数据库设计大有好处。在数据库设计中,为了更好地应用三个范式,就必须通俗地理解三个范式(通俗地理解是够用的理解,并不是最科学最准确的理解):
第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解;
- 第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;
第三范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。没有冗余的数据库设计可以做到。但是,没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据(冗余数据需要保证在原表中不会进行频繁修改,且该表的数据量非常大,偶尔变更冗余字段的时候根据业务情况,看是否需要将其他表中这个字段进行更新,有时候为了记录之前的数据,是不做更新的,例如每个人,每个订单,一开始地址为A,后面地址为B,那么为了记录之前订单是A地址的,那么这条A地址信息就不会随着地址变更为B地址而更新)。具体做法是:在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段,允许冗余,无法达到冗余数据的条件时,冗余就是非必须的,此时应该严格遵守3NF。
数据库的分类
关系型数据库: MySQL/oracle/db2/informix/sysbase/sql server/pgSQL
非关系型数据库: (特点: 面向对象或者集合)
NoSql数据库: MongoDB(特点是面向文档)
在一个查询中,使用哪一个关键字能够除去重复列值
答案:使用distinct关键字
什么是快照,它的作用是什么
答案:快照Snapshot是一个文件系统在特定时间里的镜像,对于在线实时数据备份非常有用。快照对于拥有不能停止的应用或具有常打开文件的文件系统的备份非常重要。对于只能提供一个非常短的备份时间而言,快照能保证系统的完整性。
SQL Server是否支持行级锁,有什么好处
答案:支持动态行级锁定
SQL Server 2000动态地将查询所引用的每一个表的锁定粒度调整到合适的级别。当查询所引用的少数几行分散在一个大型表中时,优化数据并行访问的最佳办法是使用粒度锁,如行锁。但是,如果查询引用的是一个表中的大多数行或所有行,优化数据并行访问的最佳办法可以是锁定整个表,以尽量减少锁定开销并尽快完成查询。
SQL Serve 2000通过为每个查询中的每个表选择适当的锁定级别,在总体上优化了数据并发访问。对于一个查询,如果只引用一个大型表中的几行,则数据库引擎可以使用行级锁定;如果引用一个大型表的几页中的多行,则使用页级锁定;如果引用一个小型表中的所有行,则使用表级锁定。
数据库日志干什么用,数据库日志满的时候再查询数据库时会出现什么情况? 答案:每个数据库都有事务日志,用以记录所有事务和每个事务对数据库所做的修改。
存储过程和函数的区别
答案:存储过程是用户定义的一系列SQL语句的集合,涉及特定表或其它对象的任务,用户可以调用存储过程,而函数通常是数据库已定义的方法,它接收参数并返回某种类型的值并且不涉及特定用户表
事务是什么
游标的作用,如何知道游标已经到了最后
答案:游标用于定位结果集的行,通过判断全局变量@@FETCH_STATUS可以判断是否到了最后,通常此变量不等于0表示出错或到了最后。
触发器分为事前触发和事后触发,这两种触发有何区别?语句级触发和行级触发有何区别
答案:
事前触发器运行于触发事件发生之前,而事后触发器运行于触发事件发生之后。通常事前触发器可以获取事件之前和新的字段值。
语句级触发器可以在语句执行前或后执行,而行级触发在触发器所影响的每一行触发一次。
解决死锁的方法有哪些
答案:
解决手段一:SQL Server自动检测和消除死锁
解决手段二:设置死锁优先级
解决手段三:设置锁定超时
解决手段四:使用更新锁避免死锁
提高数据库运行效率的办法有哪些
答案:在给定的系统硬件和系统软件条件下,提高数据库系统的运行效率的办法是:
(1) 在数据库物理设计时,降低范式,增加冗余, 少用触发器, 多用存储过程。
(2) 当计算非常复杂、而且记录条数非常巨大时(例如一千万条),复杂计算要先在数据库外面,以文件系统方式用C++语言计算处理完成之后,最后才入库追加到表中去。这是电信计费系统设计的经验。
(3) 发现某个表的记录太多,例如超过一千万条,则要对该表进行水平分割。水平分割的做法是,以该表主键PK的某个值为界线,将该表的记录水平分割为两个表。若发现某个表的字段太多,例如超过八十个,则垂直分割该表,将原来的一个表分解为两个表。
(4) 对数据库管理系统DBMS进行系统优化,即优化各种系统参数,如缓冲区个数。
(5) 在使用面向数据的SQL语言进行程序设计时,尽量采取优化算法。总之,要提高数据库的运行效率,必须从数据库系统级优化、数据库设计级优化、程序实现级优化,这三个层次上同时下功夫。
简述存储过程的优缺点
优点:
1. 更快的执行速度:存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度;
2. 与事务的结合,提供更好的解决方案:当对数据库进行复杂操作时(如对多个表进行Update、Insert、Query和Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用;
3. 支持代码重用:存储过程可以重复使用,可减少数据库开发人员的工作量;4. 安全性高:可设定只有某此用户才具有对指定存储过程的使用权。
缺点:
1. 如果更改范围大到需要对输入存储过程的参数进行更改,或者要更改由其返回的数据,则您仍需要更新程序集中的代码以添加参数、更新 GetValue() 调用,等等,这时候估计比较繁琐了。
2. 可移植性差由于存储过程将应用程序绑定到 SQL Server,因此使用存储过程封装业务逻辑将限制应用程序的可移植性。如果应用程序的可移植性在您的环境中非常重要,则将业务逻辑封装在不特定于 RDBMS 的中间层中可能是一个更佳的选择。
主键和唯一索引有什么区别
答案:
相同点:它们都属于实体完整性约束。
不同点:
(1) 唯一性约束所在的列允许空值,但是主键约束所在的列不允许空值。
(2) 可以把唯一性约束放在一个或者多个列上,这些列或列的组合必须有唯一的。但是,唯一性约束所在的列并不是表的主键列。
(3) 唯一性约束强制在指定的列上创建一个唯一性索引。在默认情况下,创建唯一性的非聚簇索引,但是,也可以指定所创建的索引是聚簇索引。
(4) 建立主键的目的是让外键来引用。
(5) 一个表最多只有一个主键,但可以有很多唯一键。
因为有些视图的更新不能惟一有意义地转换成对相应基本表的更新,所以,并不是所有的视图都是可更新的。
哪类视图是可以更新的?哪类视图是不可更新的?各举一例说明
答案:基本表的行列子集视图一般是可更新的。若视图的属性来自集函数、表达式,则该视图肯定是不可以更新的。
在为视图创建索引前,视图本身必须满足哪些条件
(1) 视图以及视图中引用的所有表都必须在同一数据库中,并具有同一个所有者
(2) 索引视图无需包含要供优化器使用的查询中引用的所有表。
(3) 必须先为视图创建唯一群集索引,然后才可以创建其它索引。
(4) 创建基表、视图和索引以及修改基表和视图中的数据时,必须正确设置某些 SET 选项(在本文档的后文中讨论)。另外,如果这些 SET 选项正确,查询优化器将不考虑索引视图。
(5) 视图必须使用架构绑定创建,视图中引用的任何用户定义的函数必须使用 SCHEMABINDING 选项创建。
(6) 另外,还要求有一定的磁盘空间来存放由索引视图定义的数据。
什么是SQL Server的确定性函数和不确定性函数
答案:只要使用特定的输入值集并且数据库具有相同的状态,不管何时调用,始终都能范围相同结果的函数叫确定性函数。几十访问的数据库的状态不变,每次书用特定的输入值都可能范围不同结果的函数叫非确定性函数。
数据库面试题
第一章:
1)E-R模型的组成包括以下的元素,除了(C)。(选择一项)
a) 实体
b) 属性
c) 记录
d) 关系
2) 你为公司开发了一个逻辑模型:公司有10个部门,每个部门有6-7个员工,但每个员工可能会不止一个部门工作。下面所给的模型正确的是(B)。(选择一项)
a) 部门和员工之间是一种确定的一对多的关系
b) 建立一个关联表,从该关联表到员工建立一个一对多的关系,然后再从该关 联表到部门表建立一个一对多的关系
c) 建立一个关联表,从员工表到该关联表建立一个一对多的关系,然后再从部
门表到该关联表建立一个一对多的关系
d) 这种情况不能建立正常的数据库模型
3) 下面(C)不是数据库规范化要达到的效果.(选择一项)
a) 改善数据库的设计
b) 实现最小的数据冗余
c) 可以用一个表来存储所有数据,使设计及存储更加简化
d) 防止更新,插入及删除的时候,产生数据丢失
4) (A)是个人能看到的相关数据库部分的数据库视图。(选择一项) a) 外部级别
b) 逻辑级别
c) 用户级别
d) 物理级别
5) 在某ERD里有“客户”和“订单”两个实体,他们的关系是“客户”发出“订单”,在“订单”这个实体里又有“订购数量”、“产品代码”等属性,“产品”与“产品代码”之间的关系应该是(B)。(选择一项)
a) 一对一
b) 一对多
c) 多对多
d) 循环对应
6) 在ACCESS数据库表设计的时候,某用户在设计视图的有效性规则中设置为
[get score]>[average score],则此用户用的是(C)类型的检查约束。(选择一项)
a) 字段值
b) 记录级
c) 表级
d) 平均值
第二章:T-SQ程序设计
1) 使用T-SQL定义两个局部变量AA和BB,正确的语句是(A).(选择一项)
a) DECLARE@AA,@BB
b) PIRVTE@AA;@BB
c) PUBLIC@AA;@BB
d) DECLARE@AA;@BB
第三章:事务和锁
1) 四个并发连接各自同时在select,insert,update和delete操作,有时当选择的行数超 10,000时再做update/delete操作时会停止,你该(C)去修复。(选择一项)
a)在Selesct会话中,设置低优先级的Deadlock
b)在Update/Delete会话中,设置低优先级的Deadlock
c)在Select会话中,设置末提交读隔离低级别
d)设置查询等待选项为50,0000
第四章:用户和安全管理
1) 在sql server 2000的查询分析器中执行以下的t-sql:
exec sp_grantdbacces'workarea\remotelongin','dblocalh'
下列理解正确的是(B)(一项)
a) 允许windows nt 域 workarea的所有远程登陆的用户都具有访问数据库dblocalh的权限
b) 在当前数据库中为windows nt 用户workarea\remotelogin添加帐户,并取名为dblocalh
c) 把windows nt 用户workarea\remotelogin赋予已经存在的角色dblocalh的全部权限
d) 限制windows nt windows nt 用户workarea\remotelogin只能访问数据库dblocalh
2)在SQL server 2000的安全模型中,提供了“服务器”和(B)两种类型的角色。(选择一项)
a) 客户端
b) 数据库
c) 操作系统
d) 数据对象
3) 在SQL Server2000的查询分析器中,执行以下的: EXEC
sp_droplogin’DBLocalHost’ 正确的为
a) 若存在数据库DBLocalHost,将删除该数据库及其所有相关的对象
b) 若存在角色DBLocalHost,将删除该角色并从所有的相关的用户回收该角色所具有的权限
c) 若存在登录名DBLocalHost,将删除该登录.并阻止使用登录名访问 d) 若存在数据库用户DBLocalHost,将删除该用户
4) 在SQL Server2000数据库中Pubic角色是一类特殊的角色,并且具有以下的特性,除了(D)。
a) 它不能被删除。
b) 每个数据库用户都属于Public角色,甚至包括sa帐户。
c) 它包含在每个数据库中。
d) 不能为Public角色分配其他更加高级的权限。
5)在SQL Server数据库中,以下对象都可以通过Drop关键字进行删除,除了(D)。(选择一项)
A)表
B)触发器
C)视图
D)角色
6) 在SQL Server 2000的查询分析器中运行以下的T-SQL:
USE Pubs Go
GRANT INSERT,UPDATE,DELETE ON authors TO MaryYaGo将(C).(选择一项)
a) 禁止用户MaryYa操作数据库pubs中除了authors之外所有的表
b) 把数据库pubs中表authors中的数据全部转移到数据库MaryYa中
c) 赋予用户MaryYa操作数据库pubs中表authors插入更新和删除数据的权利 d) 代码运行将失败,提示GRANT操作无效
第五章:高级查询
1)在SQL Server数据库中,你想得到在products表中最贵的产品的产品名称和产品价格应该使用的查询是(A)。(选择一项)
a) SELECT TOP 1 Productnamem ,Price FROM Products ORDER BY Price desc b) SELECECT Productname,MAX(price)FROM Products
c) SELECTCT Productname
2)以下分别是sql server 2000中两个数据表的结构描述和已经有的数据项,除Anumber字段为数字类型外,其他字段数据类型都是长度为32的字符: 在查询分析器内执行以下的T-SQL(C)。(选择一项)
SELECT Acount_No,Aname FROM Saving_Accounts
UNION SELECT Account_No,Bname FROM Current_Accounts
Account No Aname Anumber
S001 James 1
S002 Rita 2
S003 Mary 3
S004 Valentina 4
Saving_Accounts 表
Acceout No Bname
C001 Micheel
C002 Rodin
Current_Accouns 表
a). 查询错误,因为使用UNION查询的时候,两个字段结构必须保持一致 b). 查询错误,因为使用UNION查询的时候,查询输出的列名必须保持一致 c). 正确得到联合查询的结果集,并且输出的列名名称为Account_No 和 Aname d) 正确得到联合查询的结果集,并且输出三列六行数据
3) 该发年终奖了,你想找出销售量最高的前5名销售,在sql server中,你会使用下面(B)查询语句。
a) select top 5 orderamount,salesmanid form orders
b) select top 5 orderamount,salesmanid form orders order by orderamount desc
c) select top 5 with orderamount,salesmanid form orders order by salesmanid desc
d) slesect top5 with orderamount,salesmanid from orders order by orderamount
2) 以下是SQL Server中使用游标变量并进行赋值的T-SQL: DECLARE @CurV CURSOR
DECLARE OBJCurV CURSOR FOR SELECT LastName FROM Employees—(1)此处填写正确的游标赋值语句,则(1)处应填写的正确的代码为(A)。(选择一项)
a) Set @Curv = ObjCurV b)
b)@Curv = ObjCurV
c) SET Curv =ObjCurV
d) Curv =ObjCurV
3) 在sql server中,以下对象可以通过create语句来创建,除了(B)。(选择一项) a) 视图 b) 游标
c) 存储过程 d) 触发器
4) 在SQL Server数据库中,(B)可以看成为虚拟的表。(选择一项) a) 游标 b) 视图
c) 全文索引 d) 存储过程
第六章:存储过程
1) 以下的T-SQL代码:
Create procedure price_proc
(@count int output,@avg_price money output,@type char(12)=’business’) as
Selec@Count=Count(*),@avg_price=Avg(price)from titles where type=@type 以下说法正确的是(B)。(选择一项)
a) 建立一个存储过程price_proc,所有参数都有是输出参数
b) 建立一个存储过程price_proc,返回的是用户指定类图书的数量及平均价格 c)
c)@count=count(*)也可以用@count=count()代替
d) 创建存储过程失败,因为select语句中用了聚合函,因此必须使用Group By进行分组
2) 考虑下面SQL Server的存储过程 CREATE procedure lookup(@a int)As If@a is null Begin
Print ‘You forgot to pass in a parameter’ Return End
Select * from sysobjects where id = @a retunrn
如果这个存储过程不带参数运行会发生(C)。(选择一项)
a) 该存储过程会打印”You forgot to pass in a parameter“
b) 该存储过程会基于无参数情况做一个查找,返回表中的所有行
c) 该存储过程有语法错误
d) 服务器会打印一条消息,提示该存储过程需要提供一个参数
3) 用sp_recompile系统存储过程可以强制 存储过程在下一次启动时进行重新编译,其语法为:其中的可以是以下某个对象名称,除了(C).(选择一项)
a) 存储过程名称
b) 触发气名称
c) 约束对象名称
d) 试图名称
4) 在SQL Server 2000中,系统存储过程(A)。(选择一项)
a) 存储在Master数据库中
b) 可以在查询分析器中修改
c) 一些名称以”sp_”开头,一些名称以”sys_”开头
d) 用来代替用户自定义的存储过程
第七章:触发器
1) 在SQL Server 2000的查询分析器中运行以下T-SQL(C): use pubs go
create table my_table(a int NULL,b int NULL)go create trigger my_trig on my_table for in sert as
if update(b) begin Create database AAA print’OK?’end go insert my_table values(3,4)go
update my_table set a=5 where b=4 go(选择 一项) a) 正确创建数据库AAA,并且打印OK?
b) 第一次正确创建数据库AAA,打印OK?,在第二次触发的时候报告错误信息,数据库AAA已经存在
c) 报告错误信息,提示不能在触发器中使用CREATE DATABASE语句
d) 该触发器不会被触发,代码运行完毕后,不创建数据库,也不会打印任何输出信息
2) 在SQL SERVER 中,以下都是触发器的特性,除了 (B)。(选择一项)
a) 强化约束
b) 可级联运行
c) 跟踪变化
d)查询优化
3)在sql server 2000中的查询分析器中运行以下的T_sql; use pubs
create table my_table (a int null,b int null) go
create trigger My_trig on my_table for insert as
if update(b)
print “更新?.” Go
Insert My_table values(3,4) Go
Update My_table set a=5 where b=4 Go
将打印输出(A)。(选择一项) a) 更新?. b) 更新?. 更新?..
c) 不打印任何信息
d) 以上代码将出现运行错误而中断
4)在查询分析器中你运行下面的语句: CREATE TABLE numbers( N1 INT,
N2 NUMERIC(5,0), N3 NUMERIC(4,2) GO
INSERT numbers VALUES(1.7,1.6,1.4) SELECT *FROM numbers )
得到的结果是(C)。(选择一项) a) 2.2,1.50
b) 1.7,1.6,1.4 c) 1,2,1.40
d) CREATE TABLE 命令不会执行,因为无法为列N2设置精度为0。 5) 假设两张表建立“主键-外键”的引用关系,则(B、C)
A.主表数据必须在子表中有对应
B.主表数据可以比子表中的数据多
C.子表外键列可以包含空值
D.外键不能是列的组合,即一个外键不能包含多列
E.与外键对应的主键不能是列的组合,即不能是组合键
多项选择题
1. 关于数据规范化,下列说法正确的有(ABCD):
A. 数据规范化的目的是为了除去关系型数据库表中冗余的数据 B. 通常第三范式被认为是大多数应用程序所需的最高等级 C. 从性能上考虑,应该将关系数据规范化到最高等级
D. 有时候为了提高整体性能,可以增加冗余――即将数据非规范化
2. 如果一个表定义了主键,不包含重复的列,且只包含依赖于主键的列,则我们称该表满足(C)。 A. 第一范式
B. 第二范式 C. 第三范式 D. 第四范式
3. 用于表示数据库实体之间关系的图是(B)。 A. 数据模型图 B. 实体关系图 C. 实体分类图 D. 以上都不是
4. 下列那条语句可以用来从T-SQL的WHILE语句中退出?(D) A. CLOSE B. BREAK C. EXIT
D. 以上都是
5. 关于T-SQL中变量的使用,下列说法正确的有(C)?
A. 局部变量以@为前缀,全部变量以@@为前缀
B. 局部变量可以不用声明而直接使用
C. 全局变量@@ROWCOUNT用于返回最近打开的游标中的行数
D. SET语句是给局部变量赋值的唯一方法
6. 语句select
datediff(mm,’01/01/1999′,’09/30/1999′)的返回值为(C)。 A. 272 B. 0 C. 8
D. 23500800
7. 事务所具有的特性有(ABCD)。 A. 原子性 B. 一致性 C. 隔离性 D. 持久性
8. 事务可以分为哪几种类型?(AB) A. 显式事务 B. 隐式事务
C. 自动提交事务 D. 延迟事务
9. 下列哪条语句用于清除自最近的事务语句以来所有的修改?(B)
A. Commit Transaction
B. Rollback Transaction
C. Begin Transaction
D. Save Transaction
10. SQL Server认可的登录身份验证机制包括(A)。
A. SQL Server身份验证 B. 混和模式身份验证 C. 明文身份验证 D. 密码身份验证
11. SQL Server使用__________、____________和___________命令来管理权限(A)
A. GRANT、DENY、REVOKE B. ALLOW、DENY、REVOKE
C. ALLOW、DISALLOW、PERMIT D. PERMIT、DENY、REVOKE
12. 下面的SQL语句用于在SQL Server的PUBS数据库中查找所有住在
California,并且收到的某本书的版税低于30%的第二作者的姓名,与之返回结果相等的SQL语句是(B)。
SELECT au_lname, au_fname FROM authors WHERE state=’CA’ AND au_id IN (SELECT au_id FROM titleauthor WHERE royaltyper<30 AND au_ord=2) A. SELECT au_lname, au_fname FROM authors INNER JOIN titleauthor ON authors.au_id= titleauthor.au_id WHERE state=’CA’ AND royaltyper<30 AND au_ord=2
B. SELECT au_lname, au_fname FROM authors UNION titleauthor ON
authors.au_id= titleauthor.au_id WHERE state=’CA’ AND royaltyper<30 AND au_ord=2
18. 在不再需要使用某个游标时,可以使用哪个语句将该游标的引用释放删除
(A)
A. CLOSE
B. FETCH
C. NOTHING
D. DEALLOCATE
19. 下列关于存储过程的说法正确的有:(A)
A. 存储过程的编写体现了模块化程序设计的思想
B. 使用存储过程在某种意义上将降低了网络流量
C. 在C/S结构中使用存储过程,保证了数据的安全性
D. 存储过程比大量的T-SQL批代码执行要快
20. 关于存储过程的两种类别,下列说法正确的有(B)
A. 系统存储过程位于master数据库中
B. 用户只能通过系统存储过程访问和更新系统表
C. 创建用户自定义存储过程可以通过企业管理器或查询分析器完成
D. 系统存储过程sp_helptext可以显示加密的存储过程的原始文本
21. 在SQL Server2000中通过存储过程返回数据的方法包括(BCD)
A. 输入参数
B. 输出参数
C. 返回代码
D. SELECT语句的结果集
22. 通过存储过程中处理错误信息的方法包括(AB)
A. 返回代码
B. 使用RAISEERROR语句
C. 使用ON ERROR GOTO 语句
D. 使用 ON ERROR RESUME语句
23. 在创建存储过程中指定WITH RECOMPILE会产生什么效果?(C)
A. 下次执行时重新编译该过程
B. 下次启动SQL Server以及执行过程时会重新编译该过程
C. 每次执行过程时都重新编译过程
D. 每次在引用表上创建索引时都重新编译该过程
24. SQL Server提供的几种重新编译存储过程的方法为(ABC)
A. 使用系统存储过程sp_recompile
B. 在创建存储过程使指定with recompile
C. 在使用execute时指定with recompile
D. 在SQL Server启动时候强制重新编译
25. 关于触发器,下列说法正确的有?(ABC)
A. 触发器主要通过事件进行触发
B. 触发器的主要作用是能够实现主键和外键所不能保证的复杂的参照完整性和数据一致性
C. 同存储过程和约束一样,触发器也是一个在数据库服务器端实现或执行业务规则的有效方法
D. 触发器可以嵌套任意层
26. 下列关于实体完整性的说法正确的有:(B)
A. 实体完整性是数据完整性约束条件的一种,其规则规定基表主键的任何部分都不可以接受空值
B. 实体完整性将行定义为特定表的唯一实体
C. 实体完整性牵制表的标识符列或主键的完整性
D. 可以通过主键约束、标识列、外键约束等实现实体完整性
27. 以下哪几项是主键约束和唯一约束的区别(BD)
A. 一个表可以有多个唯一约束,但是只能有一个主键约束
B. 主键约束列不能为空,而唯一约束可以为空
C. 主键约束只能包含一列,而唯一约束可以包含多列
D. 主键约束实现实体完整性,而唯一约束实现引用完整性
28. 关于数据库的主要数据文件和次要数据文件,下列哪一项说法是正确的(B)
A. 数据库可以有多个主要数据文件和多个次要数据文件
B. 数据库只能有一个主要数据文件,并且可以没有次要数据文件
C. 数据库只能有一个次要数据文件,但是可以有多个主要数据文件
D. 数据库可以没有主要数据文件,也可以没有次要数据文件
29. 唯一标识表中的记录的一个或者一组列被称为(B)
A. 外键
B. 主键
C. 关系
D. 度
30. SQL Server中数据库文件类型有如下几种(ABC)
A. 主要数据文件
B. 次要数据文件
C. 日志文件
D. 备份文件
31. 关于Access和SQL Server数据库的比较,以下那些说法是正确的(B、E)
A.他们都将数据保存在一个物理文件中
B.他们使用相同的SQL语言
C.他们采取类似的备份方式
D.他们都具有数据文件和日志文件
E.在打开Access数据库或者SQL Server正在运行时,数据库对应的物理文件不能被删除
32.在SQL Server的系统数据库中,(A)数据库用于保存数据库的配置信息
A.Master
B.Model
C.MSDB
D.SysDB
E.System
33.使用IDENTITY来标识特定的行时,下列写法符和要求的有(A、E)
A.CREATE TABLE ABC(Id_Num int IDENTITY(1,3),fname varchar(20))
B.CREATE TABLE ABC(Id_Num IDENTITY(5),fname varchar(20))
C.CREATE TABLE ABC(Id_Num IDENTITY(5,1),fname varchar(20))
D.CREATE TABLE ABC(Id_Num varChar IDENTITY,fname varchar(20)) E.CREATE TABLE ABC(Id_Num int IDENTITY,fname varchar(20))
34.假设有T-SQL为:ALTER TABLE ABC ADD CONSTRAINT PRIMARYKEYS CHECK(CH>300),则它的执行结果是(B)
A.为表ABC添加主键约束,并且字段CH的值必须大于300
B.为表ABC添加检查约束,约束名为PRIMARYKEYS
C.为表ABC添加约束,规定字段CH为主键
D.为表ABC添加一个字段CH,并且字段CH的值必须大于300
E.检查CH,如果CH大于300,则为表ABC添加一个字段CH,并设为主键
35.在表STUD中有一列为SNAME,执行查询语句“DELETE FROM STUD WHERE SNAME LIKE ‘_[ae]%’”时,下列STUD中哪些数据行可能被删除(B)
A.Whyte
B.Carson
C.Annet
D.Hunyer
E.都不会被删除
36.假设ABC表中的A列存储电话号码信息,则查询不是以7开头的所有电话号码,正确的查询语句是(C)
A.SELECT A FROM ABC WHERE A IS NOT ’7%’
B.SELECT A FROM ABC WHERE A LIKE ‘%7%’
C.SELECT A FROM ABC WHERE A NOT LIKE ’7%’
D.SELECT A FROM ABC WHERE A LIKE ‘[1-6]%’
E.SELECT A FROM ABC WHERE A NOT IN(’7%’)
下面的SQL试题将使用到如下一个银行基本数据库,基本表结构如下: 表名 列名 Customer
Branch (客户) customer-name
(分支机构) branch-name customer-street
branch-city customer-city
assets
表名 列名
表名 列名
Loan
(贷款) loan-number
branch-name
amount
表名 列名
Borrower
(贷款人) customer-name
loan-number 表名 列名 Account (账户) account-number branch-name balance 表名 列名 Depositor (存款人) customer-name
account-number
37.如果在同一个查询中同时存在Where子句和Having子句,那么首先应用Where子句。满足Where子句的条件的记录可以通过group by子句形成分组。Having子句若存在,就将在用于每一分组。不符合having子句条件的分组将被抛弃,剩余的分组被Select子句用来产生查询结果记录集。
我们利用上面信息来完成如下操作:“找出住在Harrison且在银行中至少有三个账户的客户的平均余额”:
A. Select depositor. customer-name, avg(balance) From depositor, account, customer
Where depositor.account-number = account.account-number And
account.account-number = customer.customer-name And
customer-city = ‘Harrison’ group by account.customer-name
having count (distinct depositor.account-number)>=3
B. Select depositor. customer-name, avg(balance) From depositor, account, customer
Where depositor.account-number = account.account-number And
depositor.account-number = customer.customer-name And
customer-city = ‘Harrison’ group by depositor.customer-name having count (depositor.account-number)>=3
C. Select depositor. customer-name, avg(balance) From depositor, account, customer
Where depositor.account-number = account.account-number And
depositor.account-number = customer.customer-name And
customer-city = ‘Harrison’ group by depositor.customer-name having count (distinct depositor.account-number)>=3
D. Select depositor. customer-name, avg(balance) From depositor, account, customer Where depositor.account-number = account.account-number And depositor.account-number = customer.customer-name And
customer-city = ‘Harrison’ group by account.customer-name
having count (depositor.account-number)>=3
38.“找出在银行中有贷款的客户的名字,并且他的名字既不是Smith 也不是 Jones”:(C)
A. select distinct customer-name from borrower where customer-name not is (‘Smith’,’Jones’)
42. “找出每个支行储户数”:(C)
A. Select branch-name, count(customer-name) From depositor, account Where depositor.account-number = account.account-number Group by branch-name
B. Select branch-name, count(distinct customer-name) From depositor, account
Where depositor.account-number = account.account-number
C. Select branch-name, count(distinct customer-name) From depositor, account
Where depositor.account-number = account.account-number Group by branch-name
D. Select branch-name, count(customer-name) From depositor, account Group by branch-name
43.“找出账户平均余额大于1200元的支行”:(C) A. Select branch-name, avg(balance) From account Where balance > 1200 Group by branch-name
B. Select branch-name, avg(balance) From account Group by branch-name Having balance > 1200
C. Select branch-name, avg(balance) From account Group by branch-name Having avg(balance) > 1200
D. Select branch-name, avg(balance) From account Where balance>avg(balance)
Group by branch-nameHaving balance > 1200
44.“找出街道地址中包含子串Main的所有客户的姓名”:(C)
A. Select customer-name From customer Where customer-street like ‘_Main_’
B. Select customer-name From customer Where customer-street like ‘Main%’
C. Select customer-name From customer Where customer-street like ‘%Main%’
D. Select customer-name From customer Where customer-street like ‘\%Main\%’
单项选择题
1) 数据库设计的任务是(c)。
a) 选择一个符合项目需求的数据库
b) 根据需求建立几个表来存贮数据
c) 规划和结构化数据库中的数据对象以及这些对象之间的关系
d) 能使程序同时访问多个或多种数据库
2) (a)图被用来表示数据库实体之间的关系。 a) 实体关系
b) 数据模型
c) 实体分类
d) 以上都不是
3) 用户程序使用 SQL批处理技术的好处是(bcd)(多选)。
a) 没有好处,和每次传递一条SQL语句一样
b) 可以减少网络流量 c) 简化数据库的管理 d) 提高效率
4) 在sql server的存储过程中,有几个语句用于为局部变量赋值(b)。
a) 1个
b) 2个
c) 3个
d) 不需要语句,等号即可
5) 在用户程序中,如果没有设置显示或隐式事务模式,那么SQL server(b)。
a) 不进行任何事务处理
b) 使用自动提交模式
c) 就处理不了数据的更新 d) 选择默认的隐式事务模式 6) 当我们的程序使用了select * from table时,sql server会为我们建立(c)锁。
a) 意向
b) 排他
c) 共享
d) 构架
7) 如果某公司有10个部门,每个部门有6-7个员工,但每个员工可能会为不止一个部门工作。下面所给的模型合理的是( c)。
a) 部门和员工之间是一种确定的一对多的关系
b) 建立一个关联表,从该关联表到员工表建立一个一对多的关系,然后再从该关连表到部门表建立一个一对多的关系
c) 建立一个关联表,从员工表到该关联表建立一个一对多的关系,然后从部门表到该关联表建立一个一对多的关系
d) 这种情况,不能建立正常的数据库模型
8) 有一张销售表orders,含有地区编号(regionID)、销售额(orderamount)两列,现希望统计出各地区的销售总额以及所有销售额总和,下面( c)语句可以实现。
a) SELECT SUM (orderamount) FROM orders GROUP BY salepersonID, regionID b) SELECT regionID, SUM (orderamount) FROM orders ORDER BY regionID COMPUTE SUM (orderamount)
c) SELECT regionID, orderamount FROM orders ORDER BY regionID COMPUTE SUM (orderamount) BY regionID COMPUTE SUM (orderamount) d) SELECT regionID, orderamount FROM orders
GROUP BY regionID, orderamount COMPUTE SUM (orderamount) 9) 你想删除在t表中5年以前的数据,可以使用以下(a)的T-SQL a) Delete from t Where OrderDate < DATEADD(YYYY,-5,GETDATE()) b) Delete from t Where OrderDate < DATEADD(YYYY,5,GETDATE()) c) Delete from t Where OrderDate < GETDATE(), -5 d) Delete from t Where OrderDate < GETDATE(), +5
10) 一存储过程:
CREATE PROCEDURE pr_getstudent @age Int As
select name,age from Students where Age = @age 假如你要在Students表中查找年龄是18岁的学生,( b)可以正确的调用这个存储过程。
a) EXEC pr_getstudent @ age ='18' b) EXEC pr_getstudent @ age =18 c) EXEC pr_getstudent age ='18' d) EXEC pr_getstudent age =18
11) 在SQL Server 2000的查询分析器中运行以下T-SQL: USE PUBS GO sp_recompile Authors 下面说法正确的是:C
a) 报告语法错误,因为执行存储过程需要EXEC关键字 b) 执行成功,并且Authors表中的数据行被重新排列
c) 执行成功,并且Authors表中的存储过程在下次运行时将重新编译
d) 执行成功,并且Authors表中的触发器将被暂时禁止使用,直到下次运行本命令
12) 在SQL Server的视图里有:
SELECT DISTINCT productName, price FROM
product WHERE (price>(SELECT AVG(price) FROM product)) ORDER BY price DESC; 下面说法错误的是(B ).
a) ”SELECT AVG(price) FROM product ”是子查询
b) ”ORDER BY price DESC”是指按price从低到高顺序排列
c) 查询结果显示的是大于平均价格的产品记录
d) 此查询显示的字段只有”productName”和”price”
13) 以下是SQL Server表autos的定义: Create table autos (
make varchar(20) not null, model varchar(20) not null, acquisition_cost money null, acquisition_date datetime null )go
创建该表后再执行以下的语句: Truncate table autos Begin tran
Insert autos (make,model) values (‘Tucker’,'Torpedo’) If exists (select * from autos) Rollback tran Else
Commit tran go
以下说法正确的是(B)
a) 该批处理将失败,因为begin tran??commit tran 没有正确嵌套
b) 该批处理结束后,表内没有数据行
c) 该批处理结束后,表内有一行数据
d) 插入数据行的语句将失败,并且提示错误信息
14) 下列哪些答案最好地表达了下面建表命令的执行结果? (AC)
Create table MyTable (id int not null, price smallmoney not null, markup numeric (5,2) not null, msrp as price *(1+(markup/100))) a) SQL Sever存储了一张4列的表
b) SQL Server存储了一张看上去像4列实际上是3列的表 c) 建立了一张表,只允许msrp字段为null d) Markup字段是7位数字宽度
15) 关于IDENTITY属性的描述,错误的说法是? C
a) 一个表只能有一个列具有IDENTITY属性。
b) 你不能对定义了IDENTITY属性的列加上 default约束。
c) 附加了IDENTITY属性的列可以是任意数据类
d) 你不能直接更新一个定义了IDENTITY属性的列。
16) Create table Sale(SaleId numeric identity, CustomerId numeric(10),
SaleNote varchar(2000) default ‘NONE’,
SaleDate datetime) 你不想将SaleNote再存储到表中,为了从表中删除SaleNote,下面所列的做法中最好的是D
a) 将sale表从数据库中以块的方式拷贝了来,删除该表,然后建立一个新的sale表,并将数据库块拷贝到的Sale表中,但忽略SaleNote列。
b) 通过删除SaleNote列来改变Sale表。
c) 先将Sale表改名,然后建立一个新的Sale表,用DTS将数据转移到新的Sale表中,但忽略SaleNote列。最后删除原始的sale表。
d) 先删除SaleNote列的缺省对象(包括索引和约束等),然后再删除该SaleNote列。
17) 对于下列建表语句:描述正确的是(A)。
Create table MyTable(id int not null,price smallmoney not null,markup numeric(5,2) not null,msrp as price*(1+(markup/100)))
a) 在数据库中建立了表MyTable
b) 表中所有字段都可以为null
c) 除了字段msrp,表中所有其它字段都可以为null
d) 不会建立表MyTable
18) 考虑下列实例,设计一个数据库跟踪系里的课程负载情况 : PROFESSORS表包含每一个教授的信息。