分享

SQL Server 面试题

 为你放纵一生 2016-12-09

维护数据库的完整性、一致性、你喜欢用触发器还是自写业务逻辑?为什么?

答:尽可能用约束(包括CHECK、主键、唯一键、外键、非空字段)实现,这种方式的效率最好;其次用触发器,这种方式可以保证无论何种业务系统访问数据库都能维持数据库的完整性、一致性;最后再考虑用自写业务逻辑实现,但这种方式效率最低、编程最复杂,当为下下之策。

什么是事务?什么是锁?

答:事务是指一个工作单元,它包含了一组数据操作命令,并且所有的命令作为一个整体一起向系统提交或撤消请求操作,即这组命令要么都执行,要么都不执行。

锁是在多用户环境中对数据的访问的限制。SqlServer自动锁定特定记录、字段或文件,防止用户访问,以维护数据安全或防止并发数据操作问题,锁可以保证事务的完整性和并发性。

什么是索引,有什么优点?

答:索引象书的目录类似,索引使数据库程序无需扫描整个表,就可以在其中找到所需要的数据,索引包含了一个表中包含值的列表,其中包含了各个值的行所存储的位置,索引可以是单个或一组列,索引提供的表中数据的逻辑位置,合理划分索引能够大大提高数据库性能。

视图是什么?游标是什么?

答:视图是一种虚拟表,虚拟表具有和物理表相同的功能,可以对虚拟表进行增该查操作,视图通常是一个或多个表的行或列的子集,视图的结果更容易理解(修改视图对基表不影响),获取数据更容易(相比多表查询更方便),限制数据检索(比如需要隐藏某些行或列),维护更方便。

游标对查询出来的结果集作为一个单元来有效的处理,游标可以定位在结果集的特定行、从结果集的当前位置检索一行或多行、可以对结果集中当前位置进行修改。
什么是存储过程?有什么优点?

答:存储过程是一组予编译的SQL语句,它的优点有1.允许模块化程序设计,就是说只需要创建一次过程,以后在程序中就可以调用该过程任意次。2.允许更快执行,如果某操作需要执行大量SQL语句或重复执行,存储过程比SQL语句执行的要快。3.减少网络流量,例如一个需要数百行的SQL代码的操作有一条执行语句完成,不需要在网络中发送数百行代码。4.更好的安全机制,对于没有权限执行存储过程的用户,也可授权他们执行存储过程。

什么是触发器?

答:出发器是一种特殊类型的存储过程,出发器主要通过事件触发而被执行的,触发器的优点:1.强化约束,触发器能够提供比CHECK约束。2.跟踪变化,触发器可以跟踪数据库内的操作,从而不允许未经允许许可的更新和变化。3.联级运算,比如某个表上的触发器中包含对另一个表的数据操作,而该操作又导致该表上的触发器被触发。

介绍一下sql server的安全性?

1、  两种登陆方式:

a)         标准登陆方式(sqlserverwindows),采用sqlserver提供的用户名和密码登陆连接,可用 sp_denylogin ‘builtinadministrators’拒绝操作系统管理员登陆连接(sp_grantlogin ‘builtinadministrators’反转),也称非信任登陆机制;这种认证方式是两种方式中最安全的。

b)         集成登陆方式(仅windows),将windows的用户和工作组映射为sqlserver的登陆方式,也称信任机制。

2、  一个特殊帐户:sa,为系统默认帐户,不能删除,拥有最高的管理权限,可以执行sqlserver服务器范围内的所有操作,所以一定要给sa加上密码,密码推荐不少于6位,最后是字母、数字和特殊符号的组合。

3、  两个特殊数据库用户:

a)         dbo,数据库的拥有者,在安装sqlserver时,被设置到model数据库中,不能被删除,所以dbo在每个数据库中都存在。dbo是数据库的最高权力者,对应于创建该数据库的登陆用户,即所有的数据库的dbo都对应于sa帐户;

b)         guest,这个用户可以使任何已经登陆到sqlserver服务器的用户都可以访问数据库,即使它还没有成为本数据库的用户。所有的系统数据库除model以外都有 guest用户。所有新建的数据库都没有这个用户,如果油必要添加guest用户,请用sp_grantdbaccess来明确建立这个用户。

4、  还原数据库的时候之所以要删除本数据库的用户如user,然后在安全性登陆里重新建这个用户和指定相应的访问权限,是因为这个用户在master里不存在。当然你也可以用sp_addlogin ‘user’,'resu’来新建user用户,sp_change_users_login ‘update_one’,'user’,'user’来指定在master中的对应。

5、  具有system administrators服务器角色的成员拥有与sa一样的权限,具有db_owner数据库角色的用户具有对本数据库的完全操作权限。如果在创建 login的时候,选择了system administrators角色,那么该用户创建的对象都属于dbo用户。

介绍一下SQL Server的全文索引?

全文索引可以对存储在SQL Server数据库中的文本数据执行快速检索功能。同LIKE谓词不同,全文索引只对字符模式进行操作,对字和语句执行搜索功能。全文索引对于查询非结构化数据非常有效。一般情况下,可以对charvarcharnvarchar数据类型的列创建全文索引,同时,还可以对二进制格式的列创建索引,如imagevarbinary数据类型列。对于这些二进制数据,无法使用LIKE谓词。

为了对表创建全文索引,表必须包含单个、唯一、非空列。当执行全文检索的时候,SQL Server搜索引擎返回匹配搜索条件的行的键值。一般情况,使用sql server中的全文索引,经过大体4个步骤:

1、安装全文索引服务;

2、  为数据表建立全文索引目录;

3、  使全文索引与数据表内容同步;

4、  使用全文索引进行查询。

SQL Server里面什么样的视图才能创建索引?

在为视图创建索引前,视图本身必须满足以下条件:

1、  视图以及视图中引用的所有表都必须在同一数据库中,并具有同一个所有者。

2、  索引视图无需包含要供优化器使用的查询中引用的所有表。

3、  必须先为视图创建唯一群集索引,然后才可以创建其它索引。

4、  创建基表、视图和索引以及修改基表和视图中的数据时,必须正确设置某些 SET 选项(在本文档的后文中讨论)。另外,如果这些 SET 选项正确,查询优化器将不考虑索引视图。

5、  视图必须使用架构绑定创建,视图中引用的任何用户定义的函数必须使用 SCHEMABINDING 选项创建。

另外,还要求有一定的磁盘空间来存放由索引视图定义的数据。

介绍一下SQL Server里面的索引视图?

复杂报表的场景经常会在数据仓储应用程序中遇到,它在查询过程中会对数据库服务器产生大量请求。当这些查询访问视图时,因为数据库将建立视图结果集所需的逻辑合并到从基本表数据建立完整查询结果集所需的逻辑中,所以性能将会下降。这一操作的开销可能会比较大,尤其当视图涉及到复杂的大量行处理如大量数据聚合或多表联结时。因为结果集并不永久存放在数据库(标准视图)中,以后对该视图的访问可能导致在每次执行查询时建立结果集的代价。

SQL Server允许为视图创建独特的聚集索引,从而让访问此类视图的查询的性能得到极大地改善。在创建了这样一个索引后,视图将被执行,结果集将被存放在数据库中,存放的方式与带有聚集索引的表的存放方式相同。这就在数据库中有效地实现了查询结果。对于那些在FROM子句中不直接指定视图名的查询,SQL Server查询优化器将使用视图索引。现有查询将受益于从索引视图检索数据而无需重新编写程序原码的高效率。对于某些特定类型的视图,甚至可以获得指数级的性能改善。

如果在视图上创建索引,那么视图中的数据会被立即存储在数据库中,对索引视图进行修改,那么这些修改会立即反映到基础表中。同理,对基础表所进行的数据修改也会反映到索引视图那里。索引的惟一性大大提高了SQL Server 查找那些被修改的数据行。

维护索引视图比维护基础表的索引更为复杂。所以,如果认为值得以因数据修改而增加系统负担为代价来提高数据检索的速度,那么应该在视图上创建索引。

SQL Server提供的3种恢复模型都是什么? 有什么区别?

SQL Server提供了3种恢复模型,分别是:

1、  简单恢复,允许将数据库恢复到最新的备份。

2、  完全恢复,允许将数据库恢复到故障点状态。

3、  大容量日志记录恢复,允许大容量日志记录操作。

这些模型中的每个都是针对不同的性能、磁盘和磁带空间以及保护数据丢失的需要。例如,当选择恢复模型时,必须考虑下列业务要求之间的权衡:

1、  大规模操作的性能(如创建索引或大容量装载)。

2、  数据丢失表现(如已提交的事务丢失)。

3、  事务日志空间损耗

4、  备份和恢复过程的简化。

根据正在执行的操作,可以有多个适合的模型。选择了恢复模型后,设计所需的备份和恢复过程。下表提供了三种恢复模型的优点和含义的概述。

备份模型之间的比较

恢复模型

优点

工作损失表现

能否恢复到即时点?

简单

允许高性能大容量复制操作。

收回日志空间以使空间要求最小。

必须重做自最新的数据库或差异备份后所发生的更改。

可以恢复到任何备份的结尾处。随后必须重做更改。

完全

数据文件丢失或损坏不会导致工作损失。

可以恢复到任意即时点(例如,应用程序或用户错误之前)。

正常情况下没有。

如果日志损坏,则必须重做自最新的日志备份后所发生的更改。

可以恢复到任何即时点。

大容量日志记录的

允许高性能大容量复制操作。大容量操作使用最少的日志空间。

如果日志损坏,或者自最新的日志备份后发生了大容量操作,则必须重做自上次备份后所做的更改。否则不丢失任何工作。

可以恢复到任何备份的结尾处。随后必须重做更改。

简单恢复所需的管理最少。在简单恢复模型中,数据只能恢复到最新的完整数据库备份或差异备份的状态。不使用事务日志备份,而使用最小事务日志空间。一旦不再需要日志空间从服务器故障中恢复,日志空间便可重新使用。与完整模型或大容量日志记录模型相比,简单恢复模型更容易管理,但如果数据文件损坏,则数据损失表现会更高。

完全恢复和大容量日志记录恢复模型为数据提供了最大的保护性。这些模型依靠事务日志提供完全的可恢复性,并防止最大范围的故障情形所造成的工作损失。完全恢复模型提供最大的灵活性,可将数据库恢复到更早的即时点。

大容量日志记录模型为某些大规模操作(如创建索引或大容量复制)提供了更高的性能和更低的日志空间损耗。不过这将牺牲时点恢复的某些灵活性。很多数据库都要经历大容量装载或索引创建的阶段,因此可能希望在大容量日志记录模型和完全恢复模型之间进行切换。

SQL Server的固定数据库角色都有哪些?对应的服务器权限有哪些?

固定服务器角色

对应的服务器级权限

bulkadmin

授予的权限: ADMINISTER BULK OPERATIONS

dbcreator

授予的权限: CREATE DATABASE

diskadmin

授予的权限: ALTER RESOURCES

processadmin

授予的权限: ALTER SERVER STATE

processadmin

授予的权限: ALTER ANY CONNECTION

securityadmin

授予的权限: ALTER ANY LOGIN

serveradmin

授予的权限: ALTER SETTINGS

serveradmin

授予的权限: SHUTDOWN

serveradmin

授予的权限: CREATE ENDPOINT

serveradmin

授予的权限: ALTER SERVER STATE

serveradmin

授予的权限: ALTER ANY ENDPOINT

serveradmin

授予的权限: ALTER RESOURCES

setupadmin

授予的权限: ALTER ANY LINKED SERVER

sysadmin

GRANT 选项授予的权限:CONTROL SERVER

SQL Server中创建数据库主要有那种方式?

SQL Server中创建数据库主要有两种方法:

第一种是在SQL Server Management Studio中使用向导创建数据库;

第二种是执行Transact-SQL语句创建数据库。

小小+霸霸+王王=小霸王

=?,=?,=?

sql求证

declare @data int,@i int,@j int,@l int

set @data=100

while (@data<=999)
begin

set @i=@data/100

set @j=@data/10 % 10

set @l=@data % 10

if((@i+@j+@l)*11=@data)

begin

Select @data data,@i i,@j j,@l l

break

end

set @data=@data+1

end;

分析:

II+JJ+LL=IJL

I*10+I +J*10+J+L*10+L   =   I*100+J*10+L

(I+J+L)*11

SQL Server 2000数据库的文件有哪些,分别进行描述。

SQL Server 2000 数据库有三种类型的文件:

主要数据文件

主要数据文件是数据库的起点,指向数据库中文件的其它部分。每个数据库都有一个主要数据文件。主要数据文件的推荐文件扩展名是 .mdf

次要数据文件

次要数据文件包含除主要数据文件外的所有数据文件。有些数据库可能没有次要数据文件,而有些数据库则有多个次要数据文件。次要数据文件的推荐文件扩展名是 .ndf

日志文件

日志文件包含恢复数据库所需的所有日志信息。每个数据库必须至少有一个日志文件,但可以不止一个。日志文件的推荐文件扩展名是 .ldf

什么是SQL Server的确定性函数和不确定性函数?

只要使用特定的输入值集并且数据库具有相同的状态,不管何时调用,始终都能范围相同结果的函数叫确定性函数。

几十访问的数据库的状态不变,每次书用特定的输入值都可能范围不同结果的函数叫非确定性函数。

介绍一下Transact-SQLSPACE函数的用法?

SPACE函数的语法是SPACEn

SPACE函数的作用是范围n个空格

SPACE函数的参数n是指示空格个数的正整数。如果n为负,则返回空字符串。

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多