MSSQL 常见面试题 下载本文

内容发布更新时间 : 2024/10/12 12:31:22星期一 下面是文章的全部内容请认真阅读。

一.数据库概念

1. 约束

约束有几种? 主关键字约束(Primary Key Constraint)、外关键字约束(Foreign Key Constraint)、惟一性约束(Unique Constraint)、检查约束(Check Constraint)和缺省约束(Default Constraint)。 2. 表连接

表的连接方式有几种?内外连接的差别? 内连接(inner join),外连接(outer join),交叉连接(cross join)。

内联接消除与另一个表中的任何行不匹配的行。而外联接会返回 FROM 子句中提到的至少一个表或视图的所有行,只要这些行符合任何 WHERE 或 HAVING 搜索条件。将检索通过左向外联接引用的左表的所有行,以及通过右向外联接引用的右表的所有行。完整外部联接中两个表的所有行都将返回。 外连接又分为哪几种?

左(外)连接(left outer join /left join),右(外)连接(right outer join / right join),全外连接(full outer join / full join) 3. 索引

索引有几种?他们的区别是什么?

聚集索引(clustered index,也称聚类索引、簇集索引)和非聚集索引(nonclustered index,也称非聚类索引、非簇集索引)。

聚簇索引的顺序就是数据的物理存储顺序,而非聚簇索引的索引顺序与数据物理排列顺序无关,叶节点仍然是索引节点,只不过有一个指针指向对应的数据块。一个表最多只能有一个聚簇索引。 4. 存储过程

为什么要使用存储过程? 1.允许模块化程序设计。 2.允许更快执行。 3.减少网络流量。

4.可作为安全机制使用。 5. 事务

简单描述事务的概念和特性

事务(Transaction)是并发控制的单位,是用户定义的一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位。通过事务,SQL Server能将逻辑相关的一组操作绑定在一起,以便服务器保持数据的完整性。 A:原子性(Atomicity)

事务是数据库的逻辑工作单位,事务中包括的诸操作要么全做,要么全不做。 B:一致性(Consistency)

事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。 C:隔离性(Isolation)

一个事务的执行不能被其他事务干扰。 D:持续性/永久性(Durability)

一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。 如何判断事务中语句是否出错?

利用@@error判断是否出错 6. 数据库范式

数据库设计的一、二、三范式是什么?

第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。 第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。

第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。 7. 锁和死锁

为什么要引入锁

多个用户同时对数据库的并发操作时会带来丢失更新,脏读等数据不一致的问题。锁的分类

1. 从数据库系统的角度来看:分为独占锁(即排它锁(X)),共享锁(S)和更新锁(U)

2. 从程序员的角度看:分为乐观锁和悲观锁。 死锁是怎么产生的?

死锁就是多个用户申请不同封锁,由于申请者均拥有一部分封锁权而又等待其他用户拥有的部分封锁而引起的无休止的等待可以使用SET DEADLOCK_PRIORITY控制在发生死锁情况时会话的反应方式。如果两个进程都锁定数据,并且直到其它进程释放自己的锁时,每个进程才能释放自己的锁,即发生死锁情况。 如何避免死锁

1 使用事务时,尽量缩短事务的逻辑处理过程,及早提交或回滚事务;

2 设置死锁超时参数为合理范围,如:3分钟-10分种;超过时间,自动放弃本次操作,避免进程悬挂;

3 优化程序,检查并避免死锁现象出现;如:在TRANSACTION语句中加入TRY…CATCH语句

4 .对所有的脚本和SP都要仔细测试,在正是版本之前。 5 所有的SP都要有错误处理(通过@error)

6 一般不要修改SQL Server事务的默认级别。不推荐强行加锁

二.SQL SERVER

1、数据类型

列举SQL中几种常用的数据类型,并说明char(100),varchar(100), nvarchar(100)的差别?

Int,bit,varchar,nvarchar,datetime…

Char为定长,varchar和nvarchar为变长,nvarchar存储unicode, 为双字节,实际存储长度是200。 2、临时表和表变量 什么是临时表?

临时表与永久表相似,只是它的创建是在Tempdb中,它只有在一个数据库连接结束后或者由SQL命令DROP掉,才会消失,否则就会一直存在。临时表在创建的时候都会产生SQL Server的系统日志,虽它们在Tempdb中体现,是分配在内存中的,它们也支持物理的磁盘,但用户在指定的磁盘里看不到文件。 临时表的分类?

临时表分为本地和全局两种。

本地临时表的名称都是以“#”为前缀,只有在本地当前的用户连接中才是可见的,当用户从实例断开连接时被删除。全局临时表的名称都是以“##”为前缀,创建后对任何用户都是可见的,当所有引用该表的用户断开连接时被删除。 临时表和表变量有什么区别?

1. 创建的时候,必须要为之命名。表变量是变量的一种,表变量也分为本地及全

局的两种,本地表变量的名称都是以“@”为前缀,只有在本地当前的用户连接中才可以访问。全局的表变量的名称都是以“@@”为前缀,一般都是系统的全局变量,像我们常用到的,如@@Error代表错误的号,@@RowCount代表影响的行数。

2. 不能在表变量上创建显式的索引,只能创建PK和UNIQUE约束 3. 一旦申明表变量,就不能修改它的定义。

4. 表变量不是外部事务的组成部分。如果修改表变量的语句执行失败,则该语句

的更改会被撤销。但是,如果语句是外部事务的一部分,外部事务回滚后,对表变量已经完成的更改将不可撤销。

3、视图、CTE 简述视图、CTE 视图:是由若干基本表或其他视图构成的表的定义。未建索引的视图中的数据没有物理表现形式。

CTE:它允许使用模块化的方法开发解决方案。可简化开发过程并减少BUG和错误的出现。

4、备份和还原

数据库的备份有几种?

数据库的备份一般都会同时拥有三种:完全备份、差异备份、事务日志备份。 5、系统库、视图、过程及方法

SQL Server系统自带的数据库有哪些?系统中各个数据库的用途是什么? MASTER:核心数据库

主要配合完成数据库的权限,日志,登陆信息,设定,进程管理等数据库系统与操作系统级别的服务操作 MODEL:模版数据库

主要配合完成用户自定义数据库创建时提供各种模板 MSDB:自动化任务

主要完成一些定时,预操作比如发送邮件,提示等等等等。 TEMPDB:临时缓存

请列举一些数据库中常用的系统表? Sysobjects,syscolumns,syscomments ? 请列举一些数据库中常用的系统存储过程? Sp_helptext, sp_who, sp_who2, sp_rename… 6、错误处理

说出错误处理的两种方式(sql2005)? try...catch @@ERROR 7、性能优化

列举一些会影响数据库性能的因素。