database面试题


Posted in 面试题 onMarch 28, 2013
1.什么是索引?SQL Server 2000里有什么类型的索引?任何有经验的数据库开发人员都应该能够很轻易地回答这个问题。一些经验不太多的开发人员能够回答这个问题,但是有些地方会说不清楚。
  简单地说,索引是一个数据结构,用来快速访问数据库表格或者视图里的数据。在SQL Server里,它们有两种形式:聚集索引和非聚集索引。聚集索引在索引的叶级保存数据。这意味着不论聚集索引里有表格的哪个(或哪些)字段,这些字段都会按顺序被保存在表格。由于存在这种排序,所以每个表格只会有一个聚集索引。非聚集索引在索引的叶级有一个行标识符。这个行标识符是一个指向磁盘上数据的指针。它允许每个表格有多个非聚集索引。
 2.NULL是什么意思?  NULL(空)这个值是数据库世界里一个非常难缠的东西,所以有不少应聘者会在这个问题上跌跟头您也不要觉得意外。
  NULL这个值表示UNKNOWN(未知):它不表示“”(空字符串)。假设您的SQL Server数据库里有ANSI_NULLS,当然在默认情况下会有,对NULL这个值的任何比较都会生产一个NULL值。您不能把任何值与一个 UNKNOWN值进行比较,并在逻辑上希望获得一个答案。您必须使用IS NULL操作符。
 3.什么是主键?什么是外键?
  主键是表格里的(一个或多个)字段,只用来定义表格里的行;主键里的值总是唯一的。外键是一个用来建立两个表格之间关系的约束。这种关系一般都涉及一个表格里的主键字段与另外一个表格(尽管可能是同一个表格)里的一系列相连的字段。那么这些相连的字段就是外键。
 4.什么是触发器?SQL Server 2000有什么不同类型的触发器?
  让未来的数据库开发人员知道可用的触发器类型以及如何实现它们是非常有益的。
  触发器是一种专用类型的存储过程,它被捆绑到SQL Server 2000的表格或者视图上。在SQL Server 2000里,有INSTEAD-OF和AFTER两种触发器。INSTEAD-OF触发器是替代数据操控语言(Data Manipulation Language,DML)语句对表格执行语句的存储过程。例如,如果我有一个用于TableA的INSTEAD-OF-UPDATE触发器,同时对这个表格执行一个更新语句,那么INSTEAD-OF-UPDATE触发器里的代码会执行,而不是我执行的更新语句则不会执行操作。AFTER触发器要在DML语句在数据库里使用之后才执行。这些类型的触发器对于监视发生在数据库表格里的数据变化十分好用。
5.您如何确一个带有名为Fld1字段的TableB表格里只具有Fld1字段里的那些值,而这些值同时在名为TableA的表格的Fld1字段里?
  这个与关系相关的问题有两个可能的答案。第一个答案(而且是您希望听到的答案)是使用外键限制。外键限制用来维护引用的完整性。它被用来确保表格里的字段只保存有已经在不同的(或者相同的)表格里的另一个字段里定义了的值。这个字段就是候选键(通常是另外一个表格的主键)。
  另外一种答案是触发器。触发器可以被用来保证以另外一种方式实现与限制相同的作用,但是它非常难设置与维护,而且性能一般都很糟糕。由于这个原因,微软建议开发人员使用外键限制而不是触发器来维护引用的完整性。
  6.对一个投入使用的在线事务处理表格有过多索引需要有什么样的性能考虑?
  您正在寻找进行与数据操控有关的应聘人员。对一个表格的索引越多,数据库引擎用来更新、插入或者删除数据所需要的时间就越多,因为在数据操控发生的时候索引也必须要维护。
  7.您可以用什么来确保表格里的字段只接受特定范围里的值?
  这个问题可以用多种方式来回答,但是只有一个答案是“好”答案。您希望听到的回答是Check限制,它在数据库表格里被定义,用来限制输入该列的值。
触发器也可以被用来限制数据库表格里的字段能够接受的值,但是这种办法要求触发器在表格里被定义,这可能会在某些情况下影响到性能。因此,微软建议使用Check限制而不是其他的方式来限制域的完整性。
返回参数和OUTPUT参数之间的区别是什么?
  如果应聘者能够正确地回答这个问题,那么他的机会就非常大了,因为这表明他们具有使用存储过程的经验。返回参数总是由存储过程返回,它用来表示存储过程是成功还是失败。返回参数总是INT数据类型。OUTPUT参数明确要求由开发人员来指定,它可以返回其他类型的数据,例如字符型和数值型的值。(可以用作输出参数的数据类型是有一些限制的。)您可以在一个存储过程里使用多个OUTPUT参数,而您只能够使用一个返回参数。
  8.什么是相关子查询?如何使用这些查询?
  经验更加丰富的开发人员将能够准确地描述这种类型的查询。
  相关子查询是一种包含子查询的特殊类型的查询。查询里包含的子查询会真正请求外部查询的值,从而形成一个类似于循环的状况。
1、事务是什么?
所谓事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。
2、oracle中truncate和delete命令有何区别?
(1)delete将在回滚段中产生回滚信息,truncate不产生,因此无论表中的记录多少,truncate执行都很快。
(2)truncate 是 DDL(数据库定义语言,如Create ,Drop,Grant,Revoke),执行隐含的commit,truncate不能回滚。任何没有提交的 DML(数据操纵语言DML,如Update,Insert,Delete) 改变也将会和truncate一起提交。
(3)truncate 重置表及其索引高水位标志high-water mark。全表扫描和索引快速全扫描读高水位标志下的所有数据块,因此在delete后全扫描性能没有提高,但truncate后将会变快。
(4)truncate 不触发 delete 触发器。
(5)没有对象权限允许一个用户 truncate 另一个用户的表。这样做需要 DROP ANY TABLE 系统权限。
(6)当一个表被 truncate,表及其索引的存储将被重置回初始大小。而 delete 不收缩表及其索引的大小。
(7)当父表有一个可用的引用完整性约束时不能被 truncate。必须先disable引用父表的外键约束,再truncate。
3、Oracle中char和varchar2数据类型有什么区别?有数据”test”分别存放到char(10)和varchar2(10)类型的字段中,其存储长度及类型有何区别?
A:char是定长字符类型,varchar2是变长字符类型。“test”在char(10)中被补齐空格,存储长度是10字节,在varchar2(10)中存储长度是4字节。

外关联的性能好于not exists,not exists 好于 not in。
因为数据库在遇到这两种语句的时候是要把数据进行一条一条的比对,如果in或者not in两侧的数据量在上万条的时候,进行比对的次数就是上亿次,很可能一个简单的sql语句就要执行半个小时以上。
6、Oracle中,需要在查询语句中把空值(NULL)输出为0,如何处理?
select nvl(c1,0) from t1;// nvl函数从两个表达式返回一个非 null 值。
10、什么是聚集索引,什么是非聚集索引,什么又是主键?
聚簇索引的顺序就是数据的物理存储顺序,叶节点就是数据节点。

非聚簇索引的顺序与数据物理排列顺序无关,叶节点仍然是索引节点,只不过有一个指针指向对应的数据块。

能够唯一表示数据表中的每个记录的字段或者字段的组合就称为主键,通过它可强制表的实体完整性。

Tags in this post...

面试题 相关文章推荐
PHP如何去执行一个SQL语句
Mar 05 面试题
C++:局部变量能否和全局变量重名
Mar 03 面试题
经典c++面试题五
Dec 17 面试题
数据库笔试题
May 09 面试题
什么是反射
Mar 17 面试题
C#如何进行LDAP用户校验
Nov 21 面试题
C#中类(class)与结构(struct)的异同
Nov 03 面试题
什么是符号链接,什么是硬链接?符号链接与硬链接的区别是什么?
Jan 19 面试题
介绍一下grep命令的使用
Jun 28 面试题
软件测试题目
Feb 27 面试题
远程调用的原理
Jul 05 面试题
Structs界面控制层技术
Oct 11 面试题
存储过程的优点有哪些
Sep 27 #面试题
介绍一下游标
Jan 10 #面试题
DBA的职责都有哪些
May 16 #面试题
数据库专业英语
Nov 30 #面试题
几个SQL的面试题
Mar 08 #面试题
What is view? why do we have view?
Jun 22 #面试题
说一下mysql, oracle等常见数据库的分页实现方案
Sep 29 #面试题
You might like
php 从数据库提取二进制图片的处理代码
2009/09/09 PHP
PHP入门教程之面向对象基本概念实例分析
2016/09/11 PHP
PHPStrom 新建FTP项目以及在线操作教程
2016/10/16 PHP
JavaScript语言中的Literal Syntax特性分析
2007/03/08 Javascript
js实现addClass,removeClass,hasClass的函数代码
2011/07/13 Javascript
jquery实现图片随机排列的方法
2015/05/04 Javascript
javascript实现控制的多级下拉菜单
2015/07/05 Javascript
微信支付如何实现内置浏览器的H5页面支付
2015/09/25 Javascript
使用jQuery.form.js/springmvc框架实现文件上传功能
2016/05/12 Javascript
JavaScript 节流函数 Throttle 详解
2016/07/04 Javascript
深入理解JS DOM事件机制
2016/08/06 Javascript
jQuery实现一个简单的轮播图
2017/02/19 Javascript
AngularJS中$http使用的简单介绍
2017/03/17 Javascript
关于axios返回空对象的问题解决
2017/04/04 Javascript
jquery实现提示语淡入效果
2017/05/05 jQuery
Vue源码学习之初始化模块init.js解析
2017/11/02 Javascript
vue引用js文件的多种方式(推荐)
2018/05/17 Javascript
使用jquery DataTable和ajax向页面显示数据列表的方法
2018/08/09 jQuery
vue表单验证你真的会了吗?vue表单验证(form)validate
2019/04/07 Javascript
JavaScript枚举选择jquery插件代码实例
2020/11/17 jQuery
python安装mysql-python简明笔记(ubuntu环境)
2016/06/25 Python
python 爬虫出现403禁止访问错误详解
2017/03/11 Python
Tensorflow实现AlexNet卷积神经网络及运算时间评测
2018/05/24 Python
对python 调用类属性的方法详解
2019/07/02 Python
学习Django知识点分享
2019/09/11 Python
Tensorflow不支持AVX2指令集的解决方法
2020/02/03 Python
缅甸网上购物:Shop.com.mm
2017/12/05 全球购物
ALDO英国官网:加拿大女鞋品牌
2018/02/19 全球购物
俄罗斯品牌服装和鞋子的在线商店:KUPIVIP
2019/10/27 全球购物
西雅图电动自行车公司:Rad Power Bikes
2020/02/02 全球购物
项目开发计划书
2014/01/09 职场文书
工作失职检讨书500字
2014/10/17 职场文书
学校食堂食品安全承诺书
2015/04/29 职场文书
答谢酒会主持词
2015/07/02 职场文书
2016秋季运动会前导词
2015/11/25 职场文书
Python如何使用logging为Flask增加logid
2021/03/30 Python