sql server面试题
更新时间:2024-04-10 05:17:01 阅读量: 综合文库 文档下载
- sql server推荐度:
- 相关推荐
1.在数据库技术中,独立于计算机系统的模型是E-R模型。 2.数据库系统的控制中枢是 数据库管理系统。
3.使用SQL命令将学生表STUDENT中的学生年龄AGE字段的值增加1岁,应该使用的命令式 UPDATE STUDENT SET AGE=AGE+1.
4.在关系数据库中,建立数据库表时,将年龄字段值限制在12—40岁之间的这种约束属于 域完整性约束。
5.在SQL语句中,与 x BETWEEN 20 AND 30 等价的表达式是 x>=20 and x<=30 6.在数据库中,概念模型是 用于信息世界的建模,与具体的DBMS无关。 7.在关系数据库中,模式对应的是 视图和所有基本表。 8.数据库的并发操作可能带来的问题包括 丢失更新。
9.能实现绝对的与平台无关性的web数据库访问技术是 JDBC。 10.SQL是集合操作方式。 11.数据库系统是由数据库组成的。
12.在SQL查询时,使用WHERE子句指出的是 查询条件。 13.在RDMBS产品中,属于小型数据库系统的是 ACCESS。 14.数据库类型是按照数据模型来划分的。
15.数据库管理系统更适合于 数据处理 方面的应用。
16.CREATE,DROP,GRANT全部属于数据定义语句的命令。 17.用过INTERNET及浏览器处理的数据库,应该是主从结构式处理。 18.数据的逻辑独立性是指 数据与程序的逻辑独立性。 19.关系代数的三个基本运算时连接,投影,选择
20.用二维表来表示实体及实体之间联系的数据模型称为 关系模型。 21.在基本SQL中不可以实现 并发控制。
22.数据库镜像可以用于进行数据库恢复或并发操作。 23.在数据库系统中,应用最广泛的是 关系型数据库系统。
填空题(1空1分共20分)
1、 如果设计的表不符合第二范式,可能会导致_______,________,_______。 2、 SQL是由_______语言,________语言,_______语言组成。 3、
SQL
Server
在两个安全级上验证用户,分别是
______________,_____________________。
4、 自定义函数由___________函数,_______________函数,___________________函数组成。
5、 备份策略的三种类型是__________备份,_______________备份,
___________________备份组成。
6、 启动一个显式事务的语句为__________,提交事务的语句为__________,回滚事务的语句为__________
7、 表的每一行在表中是惟一的实体属于__________完整性,使列的输入有效属于__________完整性,两个表的主关键字和外关键字的数据应该对应一致属于__________完整性。
简答题(共20分)
1、 在帮助中[ ,...n ] 意思是什么?(4分) 2、 请简述一下第二范式(4分)
3、 现有1销售表,它们结构如下:(4分) id int (标识号)
codno char(7) (商品编码) codname varchar(30) (商品名称) spec varchar(20) (商品规格) price numeric(10,2) (价格) sellnum int (销售数量) deptno char(3) (售出分店编码) selldate datetime (销售时间)
要求:写出查询销售时间段在2002-2-15日到2002-4-29之间,分店编码是01的所有记录。 4、写一个存储过程,要求传入一个表名,返回该表的记录数(假设传入的表在数据库中都存在)(4分)
5、请简述UPDATE 触发器如何工作原理。(4分) 简答题:(共40分)
1、(5分)使用一条SQL语句找到重复的值及重复的次数:有一数据表ZD_ks,其中有字段BM,MC,。。。,请查询出在ZD_ks中BM有重复的值及重复的次数,没有的不要列出。如下表:
BM DUPCOUNT 001 3 002 2 2、描述(5分)
表1 student 学生信息表 ID int 学生编号 Name varchar 学生姓名 Sex bit 性别(男0女1) Class int 班级编号
表2 schedule 课程信息表 ID int 课程编号 Name varchar 课程名称 表3 Grade 成绩信息表 ID int 自动编号 UID int 学生编号 SID int 课程编号 Num int 考试成绩
(a)求各班的总人数(1分)
(b)求1班女生和男生的平均成绩(2分)
(c)各班”数据结构”(课程名称)不及格的人数(2分) 3、问题描述:(30分) 本题用到下面三个关系表:
CARD 借书卡。 CNO 卡号,NAME 姓名,CLASS 班级
BOOKS 图书。 BNO 书号,BNAME 书名,AUTHOR 作者,PRICE 单价,QUANTITY 库存册数
BORROW 借书记录。 CNO 借书卡号,BNO 书号,RDATE 还书日期 备注:限定每人每种书只能借一本;库存册数随借书、还书而改变。 要求实现如下15个处理:
1.找出借书超过5本的读者,输出借书卡号及所借图书册数。(2分) 2.查询借阅了”水浒”一书的读者,输出姓名及班级。(3分) 3.查询过期未还图书,输出借阅者(卡号)、书号及还书日期。(3分) 4.查询书名包括”网络”关键词的图书,输出书号、书名、作者。(2分) 5.查询现有图书中价格最高的图书,输出书名及作者。(2分)
6.查询当前借了”计算方法”但没有借”计算方法习题集”的读者,输出其借书卡号,并按卡号降序排序输出。(4分)
7.将”C01″班同学所借图书的还期都延长一周。(2分) 8.从BOOKS表中删除当前无人借阅的图书记录。(2分)
9.在BORROW表上建立一个触发器,完成如下功能:如果读者借阅的书名是”数据库技术及应用”,就将该读者的借阅记录保存在BORROW_SAVE表中(注ORROW_SAVE表结构同BORROW表)。(4分)
10.建立一个视图,显示”力01″班学生的借书信息(只要求显示姓名和书名)。(3分) 11.查询当前同时借有”计算方法”和”组合数学”两本书的读者,输出其借书卡号,并按卡号升序排序输出。(3分)
SQL Server面试题 面试要点
1. 1000人左右的企业——SQL Server 2000标准版,5000人左右的企业——SQL Server 2000企业版。
2. SQL Server 2000有几种安装方式?1)本地全新安装:家里装的一般就是这种,默认为系统用户,域用户也可以,但密码修改后会出问题,所以启动服务帐户的密码在安全性里改;2)本地升级安装;3)远程安装;4)无人值守安装。
3. 本地全新安装中身份验证模式分为:1)Windows身份验证模式;2)混合模式(Windows 身份验证和 SQL Server 身份验证)。
4. 安装后生成的组件有哪些?1)企业管理器2)事件探查器(跟踪)3)查询分析器(执行T-SQL语句)4)客户端网络实用工具5)联机丛书(帮助)。
1. SQL Server服务有哪几种?1)SQL Server服务(主服务);2)SQL Server Agent服务;3)Microsoft Search(全文本检索引擎服务);4)Distributed Transaction Coordinator(管理分布式事务服务);5)MSSQL ServerADHelper服务(发布到活动目录)。1)和2)的每一个实例都要一一对应。
2. 如何管理服务?1)通过Windows 2000服务管理器管理;2)win2003管理工具——服务(自带)。另外,对服务可以进行启动、暂停、停止。暂停的作用是:已连接到服务器的用户可完成任务,但不允许有新的连接。
3. 对SQL Server服务进行管理的是企业管理器,管理时要注册;把企业管理器和服务器进行连接;也可以注册远程服务器。
4. 对SQL Server属性配置:1)常规2)内存3)处理器4)安全性5)还原6)服务器设置7)数据库设置8)复制9)Active Directory。(修改完后要重启。)
5. 客户机如何连接服务器?在客户机上安装仅客户端工具,再通过企业管理器去连接。 6. 客户机与服务器连接两种协议:TCP/IP协议和命名管道协议。
7. 如何提高访问服务器的安全性?1)修改端口(默认为1433);2)删除命名管道。 1. 常见的数据库对象有哪些:表、索引、视图、存储过程、触发器、用户定义函数、数据库关系图、全文索引。
2. 数据库分类:系统数据库和用户数据库;数据库管理:创建、修改和查看。
3. 默认的系统数据库有哪些?1)master数据库(主);2)tempdb数据库(临时);3)model 数据库(模板);4)msdb数据库(计划任务);5)distribution数据库(发布)。
4. pubs和Northwind都是用户数据库。
5. 默认创建一个数据库,会生成哪些文件?1)主文件(.mdf),2)日志文件(.ldf),无次要文件(.ndf)。
6. 创建数据库时,能不能把数据文件和日志文件分开?可以分开,起到优化作用。把数据文件放到高速读写区,把日志文件放到低速读写区。 7. 文件组的作用:提高读写的效率。
8. 为什么要做数据库的收缩,有何作用:释放磁盘空间。为什么要移动数据库:为了数据库的升级。
9. 如何实现数据库的移动?1)分离数据库;2)把数据文件、日志文件移动到其他路径上去;3)在另一台计算机上进行附加
SQL SERVER面试资料
维护数据库的完整性、一致性、你喜欢用触发器还是自写业务逻辑?为什么?
答:尽可能用约束(包括CHECK、主键、唯一键、外键、非空字段)实现,这种方式的效率最好;其次用触发器,这种方式可以保证无论何种业务系统访问数据库都能维持数据库的完整性、一致性;最后再考虑用自写业务逻辑实现,但这种方式效率最低、编程最复杂,当为下下之策。
什么是事务?什么是锁?
答:事务是指一个工作单元,它包含了一组数据操作命令,并且所有的命令作为一个整体一起向系统提交或撤消请求操作,即这组命令要么都执行,要么都不执行。
锁是在多用户环境中对数据的访问的限制。SqlServer自动锁定特定记录、字段或文件,防止用户访问,以维护数据安全或防止并发数据操作问题,锁可以保证事务的完整性和并发性。 什么是索引,有什么优点?
答:索引象书的目录类似,索引使数据库程序无需扫描整个表,就可以在其中找到所需要的数据,索引包含了一个表中包含值的列表,其中包含了各个值的行所存储的位置,索引可以是单个或一组列,索引提供的表中数据的逻辑位置,合理划分索引能够大大提高数据库性能。 视图是什么?游标是什么?
答:视图是一种虚拟表,虚拟表具有和物理表相同的功能,可以对虚拟表进行增该查操作,视图通常是一个或多个表的行或列的子集,视图的结果更容易理解(修改视图对基表不影响),获取数据更容易(相比多表查询更方便),限制数据检索(比如需要隐藏某些行或列),维护更方便。
游标对查询出来的结果集作为一个单元来有效的处理,游标可以定位在结果集的特定行、从结果集的当前位置检索一行或多行、可以对结果集中当前位置进行修改、 什么是存储过程?有什么优点?
答:存储过程是一组予编译的SQL语句,它的优点有1.允许模块化程序设计,就是说只需要创建一次过程,以后在程序中就可以调用该过程任意次。2.允许更快执行,如果某操作需要执行大量SQL语句或重复执行,存储过程比SQL语句执行的要快。3.减少网络流量,例如一个需要数百行的SQL代码的操作有一条执行语句完成,不需要在网络中发送数百行代码。4.更好的安全机制,对于没有权限执行存储过程的用户,也可授权他们执行存储过程。 什么是触发器?
答:出发器是一种特殊类型的存储过程,出发器主要通过事件触发而被执行的,触发器的优点:1.强化约束,触发器能够提供比CHECK约束。2.跟踪变化,触发器可以跟踪数据库内的操作,从而不允许未经允许许可的更新和变化。3.联级运算,比如某个表上的触发器中包含对另一个表的数据操作,而该操作又导致该表上的触发器被触发。
SQL Server面试题(初级)
一、选择题
1. SQL语言是( )的语言,容易学习 。 A.过程化 B. 非过程化 C.格式化 D. 导航式
2. SQL语言的数据操纵语句包括SELECT、INSERT、UPDATE、DELETE等。其中最重要的,也是使用最频繁的语句是( ) 。 A. SELECT B. INSERT C. UPDATE D. DELETE
3. 在视图上不能完成的操作是( ) 。 A. 更新视图 B. 查询
C. 在视图上定义新的表 D. 在视图上定义新的视图
4. SQL语言集数据查询、数据操纵、数据定义和数据控制功能于一体,其中,CREATE、DROP、ALTER语句是实现哪种功能( )。 A. 数据查询 B. 数据操纵 C. 数据定义 D. 数据控制
5. SQL语言中,删除一个视图的命令是( )。 A.DELETE B.DROP C.CLEAR D.REMOVE 6. 在SQL语言中的视图VIEW是数据库的( ) 。 A. 外模式 B. 模式 C. 内模式 D. 存储模式 7. 下列的SQL语句中,( )不是数据定义语句。 A. CREATE TABLE B. DROP VIEW C. CREATE VIEW D. GRANT
8. 若要撤销数据库中已经存在的表S,可用( )。 A. DELETE TABLE S B. DELETE S C. DROP TABLE S D. DROP S
9. 若要在基本表S中增加一列CN(课程名),可用( )。 A.ADD TABLE S(CN CHAR(8)) B.ADD TABLE S ALTER(CN CHAR(8)) C.ALTER TABLE S ADD(CN CHAR(8)) D.ALTER TABLE S (ADD CN CHAR(8))
10. 学生关系模式 S( S#,Sname,Sex,Age),S的属性分别表示学生的学号、姓名、性别、年龄。要在表S中删除一个属性“年龄”,可选用的SQL语句是( )。 A. DELETE Age from S B. ALTER TABLE S DROP Age C. UPDATE S Age D. ALTER TABLE S ‘Age’
11. 有关系S(S#,SNAME,SAGE),C(C#,CNAME),SC(S#,C#,GRADE)。其中S#是学生号,SNAME是学生姓名,SAGE是学生年龄, C#是课程号,CNAME是课程名称。要查询选修“ACCESS”课的年龄不小于20的全体学生姓名的SQL语句是SELECT SNAME FROM S,C,SC WHERE子句。这里的WHERE子句的内容是( )。 A. S.S# = SC.S# and C.C# = SC.C# and SAGE>=20 and CNAME=‘ACCESS’ B. S.S# = SC.S# and C.C# = SC.C# and SAGE in>=20 and CNAME in ‘ACCESS’ C. SAGE in>=20 and CNAME in ‘ACCESS’ D. SAGE>=20 and CNAME=’ ACCESS’
12. 设关系数据库中一个表S的结构为S(SN,CN,grade),其中SN为学生名,CN为课程名,二者均为字符型;grade为成绩,数值型,取值范围0-100。若要把“张二的化学成绩80分”插入S中,则可用( )。 A. ADD INTO S
VALUES(’张二’,’化学’,’80’) B. INSERT INTO S
VALUES(’张二’,’化学’,’80’) C. ADD INTO S
VALUES(’张二’,’化学’,80) D. INSERT INTO S
VALUES(’张二’,’化学’,80)
13. 设关系数据库中一个表S的结构为:S(SN,CN,grade),其中SN为学生名,CN为课程名,二者均为字符型;grade为成绩,数值型,取值范围0-100。若要更正王二的化学成绩为85分,则可用( ) 。 A. UPDATE S SET grade=85
WHERE SN=’王二’ AND CN=’化学’ B. UPDATE S SET grade=’85’
WHERE SN=’王二’ AND CN=’化学’ C. UPDATE grade=85
WHERE SN=’王二’ AND CN=’化学’ D. UPDATE grade=’85’
WHERE SN=’王二’ AND CN=’化学’ 14. 在SQL语言中,子查询是( ) 。 A. 返回单表中数据子集的查询语言 B. 选取多表中字段子集的查询语句 C. 选取单表中字段子集的查询语句 D. 嵌入到另一个查询语句之中的查询语句 15. SQL是一种( )语言。 A. 高级算法 B. 人工智能 C. 关系数据库 D. 函数型
16. 有关系S(S#,SNAME,SEX),C(C#,CNAME),SC(S#,C#,GRADE)。其中S#是学生号,SNAME是学生姓名,SEX是性别, C#是课程号,CNAME是课程名称。要查询选修“数据库”课的全体男生姓名的SQL语句是SELECT SNAME FROM S,C,SC WHERE子句。这里的WHERE子句的内容是( )。
A.S.S# = SC.S# and C.C# = SC.C# and SEX=’男’ and CNAME=’数据库’ B.S.S# = SC.S# and C.C# = SC.C# and SEX in’男’and CNAME in’数据库’ C.SEX ’男’ and CNAME ’ 数据库’ D.S.SEX=’男’ and CNAME=’ 数据库’ 17. 若用如下的SQL语句创建了一个表SC:
CREATE TABLE SC (S# CHAR(6) NOT NULL,C# CHAR(3) NOT NULL,SCORE INTEGER,NOTE CHAR(20));向SC表插入如下行时,( )行可以被插入 。 A.(’201009’,’111’,60,必修) B.(’200823’,’101’,NULL,NULL) C.(NULL,’103’,80,’选修’) D.(’201132’,NULL,86,’ ’) 18. 假设学生关系S(S#,SNAME,SEX),课程关系C(C#,CNAME),学生选课关系SC(S#,C#,GRADE)。要查询选修“Computer”课的男生姓名,将涉及到关系( )。 A. S B. S,SC C. C,SC D. S,C,SC 二、简答题
1. 什么是基本表?什么是视图?两者的区别和联系是什么? 2. 所有的视图是否都可以更新?为什么?
3. 哪类视图是可以更新的,哪类视图是不可更新的? 各举一例说明。 4. 试述某个你熟悉的实际系统中对视图更新的规定。
乱炖面试题(SQL Server C++等等)
17、SQLSEVER有哪些函数?
18、用户登录验证是写数据库连接之前或之后? 19、Session和Appliction的区别?
20、不对数据库进行操作不用session和Appliction传值,你怎样把值传到其他页面? 21、C#和C++有什么区别?
22、谈谈具体的项目开发流和立项 23、function()与BUG()的区别? 24、传值与传址的区别?
25、谈谈你是怎么理解面向对象的? 26、你对软件工程与软件管理的看法? 27、给你两张表(原料表与成品表)(空表),查询出成品(汽车)所需要的原料。可再建表。
28、数据窗口更新函数UPdate()使用语法
dwcontro1.UPdate({accept{,reseflag}})含义? 当accept=True时 当accept=false时 当reseflag=True时 当resefLag=faLSe时
应届毕业生数据库面试题
1.SQL Server存储过程,与触发器的作用,与优缺点 2.SQL语句
4.标准的SQL与T-SQL的区别?写出4个SQL命令和3个T-SQL命令。
5.在实践中,对象设计常常来自数据。下表是一个软件顾问公司的数据,它列出公司内部每个顾问师的现行工作分配。
很明显,这个表违反了 第三范式。审查表中的数据,然后进行面向对象的设计,用UML类图表达出表中隐含对象之间的静态关系。
再用“一类——表格”标准法则, 把对象映射为规范化的关系结构。
名字 身份证号 工作分配 百分比 价格 公司 地址 John Smith 123-45-6789 数据库设计 60% 55 ABCD 888ave Tom Chan 582-54-5528 网络安装 40% 70 ABCD 888ave
Mike Brown 473-55-8721 软件编码 100% 80 IT。com 1 main st John Smith 123-45-6789 数据库设计 40% 60 IT。com 1 main st Sue Li 743-31-3782 客户培训 100% 65 IT。com 1 main st Tom chan 582-54-5528 网络安装 60% 75 HiTech 7 state Rd 6.数据库表user pk ID int Name (char) Age(int) Sex(bit) (1) sex=0,age=20的name降序 (2) 当sex=1时,age+1 (3) 删除所有奇数据 (4) 统计age>20的个数 (5) 年龄最大的人的名字
无名公司SQL Server笔试题 选择题:(每空2分共20分)
1、在MS SQL Server中,用来显示数据库信息的系统存储过程是( ) A sp_ dbhelp B sp_ db C sp_ help D sp_ helpdb
2、SQL语言中,删除一个表的命令是( ) A DELETE B DROP C CLEAR D REMORE
3、关系数据库中,主键是(__) A、为标识表中唯一的实体 B、创建唯一的索引,允许空值 C、只允许以表中第一字段建立 D、允许有多个主键的
4、在Transact-SQL语法中,SELECT语句的完整语法较复杂,但至少包括的部分(1___),使用关键字(2___)可以把重复行屏蔽,将多个查询结果返回一个结果集合的运算符是(3___),如果在SELECT语句中使用聚合函数时,一定在后面使用(4___)。 ⑴ A、SELECT,INTO B、SELECT,FROM
C、SELECT,GROUP D、仅SELECT ⑵ A、DISTINCT B、UNION C、ALL C、TOP ⑶ A、JOIN B、UNION C、INTO C、LIKE
⑷ A、GROUP BY B、COMPUTE BY C、HAVING D、COMPUTE
5、语句DBCC SHRINKDATABASE (Sample, 25)中的25表示的意思是 A、25M
B、剩余占整个空间的25% C、已用空间占整个空间的25% D、以上都不对
6、你是一个保险公司的数据库开发人员,公司的保单信息存储在SQL Server 2000数据库中,你使用以下脚本建立了一个名为Policy的表: CREATE TABLE Policy (
PolicyNumber int NOT NULL DEFAULT (0), InsuredLastName char (30) NOT NULL, InsuredFirstName char (20) NOT NULL, InsuredBirthDate datetime NOT NULL, PolicyDate datetime NOT NULL, FaceAmount money NOT NULL,
CONSTRAINT PK_Policy PRIMARY KEY (PolicyNumber) )
每次公司销售出一份保单,Policy表中就增加一条记录,并赋予其一个新的保单号,你将怎么做?
a.建立一个INSTEAD OF INSERT触发器来产生一个新的保单号,并将这个保单号插入数据表中。
b.建立一个INSTEAD OF UPDATE触发器来产生一个新的保单号,并将这个保单号插入数据表中。
c.建立一个AFTER UPDATE触发器来产生一个新的保单号,并将这个保单号插入数据表中。 d.用AFTER UPDATE触发器替代DEFAULT约束条件产生一个新的保单号,并将这个保单号插入数据表中。
7、在SQL语言中,如果要建立一个工资表包含职工号,姓名,职称。工资等字段。若要保证工资字段的取值不低于800元,最合适的实现方法是: A。在创建工资表时为”工资“字段建立缺省 B。在创建工资表时为”工资“字段建立检查约束 C。在工资表建立一个触发器
D。为工资表数据输入编写一个程序进行控制 8、Select 语句中用来连接字符串的符号是______. A. “+” B. “&” C.“||” D.“|”
9、你是一个出版公司的数据库开发人员,对特定的书名的每天的销售情况建立了如下的存储过程:
CREATE PROCEDURE get_sales_for_title title varchar(80), @ytd_sales int OUTPUT AS
SELECT @ytd_sales = ytd_sales FROM titles
WHERE title = @title IF @@ROWCOUNT = 0 RETURN(-1) ELSE RETURN(0)
另外建立了一个脚本执行这个存储过程,如果执行成功,将返回对应于书名的每天的销售情况的报表,如果执行失败,将返回“No Sales Found”,怎样建立这个脚本? A. DECLARE @retval int DECLARE @ytd int
EXEC get_sales_for_title ‘Net Etiquette’, @ytd IF @retval < 0
PRINT ‘No sales found’ ELSE
PRINT ‘Year to date sales: ’ + STR (@ytd) GO
B. DECLARE @retval int DECLARE @ytd int
EXEC get_sales_for_title ‘Net Etiquette’, @ytd OUTPUT IF @retval < 0
PRINT ‘No sales found’ ELSE
PRINT ‘Year to date sales: ’ + STR (@ytd)
GO
C. DECLARE @retval int DECLARE @ytd int
EXEC get_sales_for_title ‘Net Etiquette’,@retval OUTPUT IF @retval < 0
PRINT ‘No sales found’ ELSE
PRINT ‘Year to date sales: ’ + STR (@ytd) GO
D. DECLARE @retval int DECLARE @ytd int
EXEC @retval = get_sales_for_title ‘Net Etiquette’, @ytd OUTPUT IF @retval < 0
PRINT ‘No sales found’ ELSE
PRINT ‘Year to date sales: ’ + STR (@ytd) GO
10、You are a database developer for a container manufacturing company. The containers produced by your company are a number of different sizes and shapes. The tables that store the container information are shown in the Size, Container, and Shape Tables exhibit: Size SizeID
SizeName Height Container ContainerID ShapeID SizeID Shape ShapeID ShapeName Measurements
A sample of the data stored in the tables is shown below: Size Table
SizeID SizeName Height 1 Small 40 2 Medium 60 3 Large 80 4 Jumbo 100 Shape Table
ShapeID ShapeName Measurement 1 Triangle 10 2 Triangle 20
3 Triangle 30 4 Square 20 5 Square 30 6 Square 40 7 Circle 15 8 Circle 25 9 Circle 35
Periodically, the dimensions of the containers change. Frequently, the database users require the volume of a container. The volume of a container is calculated based on information in the shape and size tables.
You need to hide the details of the calculation so that the volume can be easily accessed in a SELECT query with the rest of the container information. What should you do? A. Create a user-defined function that requires ContainerID as an argument and returns the volume of the container.
B. Create a stored procedure that requires ContainerID as an argument and returns the volume of the container.
C. Add a column named volume to the container table. Create a trigger that calculates and stores volume in this column when a new container is inserted into the table. D. Add a computed column to the container table that calculates the volume of the container.
填空题(1空1分共20分)
1、 如果设计的表不符合第二范式,可能会导致_______,________,_______。 2、 SQL是由_______语言,________语言,_______语言组成。 3、
SQL
Server
在两个安全级上验证用户,分别是
______________,_____________________。
4、 自定义函数由___________函数,_______________函数,___________________函数组成。
5、 备份策略的三种类型是__________备份,_______________备份,___________________备份组成。
6、 启动一个显式事务的语句为__________,提交事务的语句为__________,回滚事务的语句为__________
7、 表的每一行在表中是惟一的实体属于__________完整性,使列的输入有效属于__________完整性,两个表的主关键字和外关键字的数据应该对应一致属于__________完整性。
简答题(共20分)
1、 在帮助中[ ,...n ] 意思是什么?(4分) 2、 请简述一下第二范式(4分)
3、 现有1销售表,它们结构如下:(4分) id int (标识号) codno char(7) (商品编码) codname varchar(30) (商品名称)
spec varchar(20) (商品规格) price numeric(10,2) (价格)
sellnum int (销售数量) deptno char(3) (售出分店编码) selldate datetime (销售时间)
要求:写出查询销售时间段在2002-2-15日到2002-4-29之间,分店编码是01的所有记录。 4、写一个存储过程,要求传入一个表名,返回该表的记录数(假设传入的表在数据库中都存在)(4分)
5、请简述UPDATE 触发器如何工作原理。(4分) 简答题:(共40分)
1、(5分)使用一条SQL语句找到重复的值及重复的次数:有一数据表ZD_ks,其中有字段BM,MC,。。。,请查询出在ZD_ks中BM有重复的值及重复的次数,没有的不要列出。如下表:
BM DUPCOUNT 001 3 002 2 2、描述(5分)
表1 student 学生信息表 ID int 学生编号 Name varchar 学生姓名 Sex bit 性别(男0女1) Class int 班级编号 表2 schedule 课程信息表 ID int 课程编号 Name varchar 课程名称 表3 Grade 成绩信息表 ID int 自动编号 UID int 学生编号 SID int 课程编号 Num int 考试成绩 (a)求各班的总人数(1分)
(b)求1班女生和男生的平均成绩(2分)
(c)各班”数据结构”(课程名称)不及格的人数(2分) 3、问题描述:(30分) 本题用到下面三个关系表:
CARD 借书卡。 CNO 卡号,NAME 姓名,CLASS 班级
BOOKS 图书。 BNO 书号,BNAME 书名,AUTHOR 作者,PRICE 单价,QUANTITY 库存册数
BORROW 借书记录。 CNO 借书卡号,BNO 书号,RDATE 还书日期 备注:限定每人每种书只能借一本;库存册数随借书、还书而改变。 要求实现如下15个处理:
1.找出借书超过5本的读者,输出借书卡号及所借图书册数。(2分) 2.查询借阅了”水浒”一书的读者,输出姓名及班级。(3分) 3.查询过期未还图书,输出借阅者(卡号)、书号及还书日期。(3分) 4.查询书名包括”网络”关键词的图书,输出书号、书名、作者。(2分) 5.查询现有图书中价格最高的图书,输出书名及作者。(2分)
6.查询当前借了”计算方法”但没有借”计算方法习题集”的读者,输出其借书卡号,并按卡号降序排序输出。(4分)
7.将”C01″班同学所借图书的还期都延长一周。(2分) 8.从BOOKS表中删除当前无人借阅的图书记录。(2分)
9.在BORROW表上建立一个触发器,完成如下功能:如果读者借阅的书名是”数据库技术及应用”,就将该读者的借阅记录保存在BORROW_SAVE表中(注ORROW_SAVE表结构同BORROW表)。(4分)
10.建立一个视图,显示”力01″班学生的借书信息(只要求显示姓名和书名)。(3分)
11.查询当前同时借有”计算方法”和”组合数学”两本书的读者,输出其借书卡号,并按卡号升序排序输出。(3分)
C#和SQL Server的面试题 1.在c#中using和new这两个关键字有什么意义,请写出你所知道的意义?using 指令 和语句 new 创建实例 new 隐藏基类中方法
4.谈谈类和结构的区别?类是引用类型、结构是值类型 5.一个长度为10000的字符串,通过随机从a-z中抽取10000个字符组成。请用c#语言编写主要程序来实现。
6.对于这样的一个枚举类型: enum Color:byte{ Red, Green, Blue, Orange }
string[] ss=Enum.GetNames(typeof(Color)); byte[] bb=Enum.GetValues(typeof(Color));
试写一段程序显示出枚举类型中定义的所有符号名称以及它们对应的数值。 7.您了解设计模式么?请列出您所知道的设计模式的名称。 //
8.请在SQL Server中设计表来保存一个树状结构的组织结构图(假设结构图中只有名称这一项内容需要保存),如果我想查询某一职位下的所有职位,用一个存储过程来实现,你有什么思路?
9.什么叫做SQL注入,如何防止?请举例说明。 10.下面这段代码输出什么?为什么? int i=5; int j=5;
if (Object.ReferenceEquals(i,j)) Console.WriteLine(“Equal”); else
Console.WriteLine(“Not Equal”);
SQL Server数据库笔试题和答案
一 单词解释(2分/个) 34分
Data 数据 Database 数据库 RDBMS 关系数据库管理系统 GRANT 授权
REVOKE 取消权限 DENY 拒绝权限 DECLARE 定义变量 PROCEDURE存储过程
事务 Transaction 触发器 TRIGGER 继续 continue 唯一 unqiue 主键 primary key 标识列 identity 外键 foreign key 检查 check 约束 constraint
二 编写SQL语句(5分/题) 50分 (包含 笔试题问题和解答答案)
1) 创建一张学生表,包含以下信息,学号,姓名,年龄,性别,家庭住址,联系电话 Create table stu (学号 int , 姓名 varchar(8), 年龄 int, 性别 varchar(4), 家庭地址 varchar(50), 联系电话 int );
2) 修改学生表的结构,添加一列信息,学历 Alter table stu add 学历 varchar(6);
3) 修改学生表的结构,删除一列信息,家庭住址 Alter table stu drop column 家庭地址 4) 向学生表添加如下信息: 学号 姓名年龄性别联系电话学历 1A22男123456小学 2B21男119中学 3C23男110高中 4D18女114大学
Insert into stu values(1,’A’,22,’男’,123456,’小学’) Insert into stu values(2,’B’,21,’男’,119,’中学’)
Insert into stu values(3,’C’,23,’男’,110,’高中’) Insert into stu values(4,’D’,18,’女’,114,’大学’)
5) 修改学生表的数据,将电话号码以11开头的学员的学历改为“大专” Update stu set 学历=’大专’ where 联系电话 like ‘11%’ 6) 删除学生表的数据,姓名以C开头,性别为‘男’的记录删除 Delect from stu where 性别=’男’ and 姓名 like ‘c%’
7) 查询学生表的数据,将所有年龄小于22岁的,学历为“大专”的,学生的姓名和学号示出来
Select 姓名,学号 from stu where 年龄<22 and 学历=’大专’ 8) 查询学生表的数据,查询所有信息,列出前25%的记录 Select top 25 percent * from stu
9) 查询出所有学生的姓名,性别,年龄降序排列 Select 姓名,性别 from stu order by 年龄 desc 10) 按照性别分组查询所有的平均年龄 Select avg(年龄) from stu group by 性别
三 填空(3分/题) 36分 (包含 笔试题问题和解答答案)
1) 索引分为__聚集索引___和__非聚集索引__在一张表上最多可以创建1个 聚集索引_索引。但是可以创建_249个非 聚集索引 索引。
2) 系统存储过程_sp-helptext__是用来显示规则,默认值,未加密的存储过程,用户定义函数,触发或视图的文本 3) 事务开始:begin Transction 提交事务:commit Transction 回滚事务:rollback Transction
四 问答题(5分/题) 60分 (包含 笔试题问题和解答答案)
1) 数据库包含哪些那几种后缀名的文件必须,这些文件分别存放在什么的信息? 主要数据文件(.mdf) 包含数据用户收集的信息,还有数据库其他相关的信息, 日志数据文件(.ndf) 存放用户对数据库的增删改查的信息,用于备份恢复使用 2) TRUNCATE TABLE 命令是什么含义?和Delete from 表名有什么区? TRUNCATE TABLE: 提供了一种删除表中所有记录的快速方法 Delete from 表名:可以删除表的一个或多条记录
3) 说出以下聚合数的含义:avg ,sum ,max ,min , count ,count(*) AVG:求平均值 SUM:求和 MAX:求最大值 MIN:求最小值
COUNT(*):返回所有行数
COUNT返回满足指定条件的记录值
4) inner join 是什么意思?作用是什么?写出基本语法结构 INNER JOIN 内联接,用于返回两个表中要查询的列数据通信 Select * from 表名1 inner join 表名2 on 条件表达式 5) 左向外联接,右向外联接,全联接的关健字如何写? Left outer join 左向外联接 Right outer join 右向外联接 Full outer join 全联接
6) 子查询分为几类,说明相互之间的别
了查询分三种基本子查询: 1.使用in 查询返回一列或更多值 2.比较运算符,返回单个值勤做为外查询的参数 3.用exists 查询时相当于进行一次数据测试
7) 实现实体完整性,实现域完整性,实现 完整性(引用完整性),实现自定义完整性分别使用什么手段?
实现实体完整性: 主键约束 唯一约束 标识列 实现域完整性: 默认值约束 检查约束 非空属性 引和完整性: 外键引用
8) 视图可以更新吗?会影响到实际表吗?
视图是可以更新的,视图只是基于基本表上的虚拟表,对视图的更新会直接影响到实际表 9) 谈谈这样几个角色, dbo , Sysadmin public Dbo : 是数据库的拥有者,对数据库拥有所有操作的权限 Sysadmin : 可以对SQL SERVER执行任何活动 Public : 自动创建的,能捕获数据库中用户的所有默认权限 10) 何为动态游标?何为静态游标?
动态游标与静态游标相对,反映结果集中所做的所有更改,
静态游标的结果集在游标打开时,建立在tempdb中,总按照游标打开时的原样显示 11) 什么是存储过程?为什么存储过程要比单纯的Sql 语句执行起来要快? 存储过程:是一组预先编译好的T-SQL代码
在创建存储过程时经过了语法和性能优化,执行不必重复的步骤,使用存储过程可提高运行效率
12)什么是Inserted 表 ?什么是Deleted 表?
Inserted表用于存储inserted和update语句影响的副本 Deleted 表用于存储delect 和 update语句影响的行的副本
写一个在SQL Server创建表的SQL语句 创建一个名为Production的表, 表中各列的名字为ProductionID, ProductionName, Price和Description. ProdictionID是这个标的主键。Price和Description可以为空。 CREATE TABLE dbo.PRODUCTION
(ProductionID int PRIMARY KEY NOT NULL, ProductionName varchar(25) NOT NULL, Price money NULL, Description text NULL) GO
介绍一下Transact-SQL中SPACE函数的用法
SPACE函数的语法是SPACE(n) SPACE函数的作用是范围n个空格
SPACE函数的参数n是指示空格个数的正整数。如果n为负,则返回空字符串。 如:
SELECT RTRIM(LastName) + ',' + SPACE(2) + LTRIM(FirstName) FROM Person.Contact
ORDER BY LastName, FirstName;
什么是SQL Server的确定性函数和不确定性函数? 只要使用特定的输入值集并且数据库具有相同的状态,不管何时调用,始终都能范围相同结
果的函数叫确定性函数。
几十访问的数据库的状态不变,每次书用特定的输入值都可能范围不同结果的函数叫非确定性函数。
SQL Server DBA面试题 – 主要是安全配置方面的 1.如何对用户的属性进行安全检查,包括空密码、密码更新时间等。如何修改目前所有账号的口令,确认为强口令。特别是sa 账号,需要设置至少10位的强口令。 查看用户状态 运行查询分析器,执行 select * from sysusers
Select name,Password from syslogins where password is null order by name # 查看口令为空的用户 Use master
createdate、updatedate时间需为确认时间。 更改口令
exec sp_password ‘旧口令’,‘新口令’,用户名
2. 如何配置对用户登录进行记录,记录内容包括用户登录使用的账号、登录是否成功、登录时间
打开数据库属性,选择安全性,将安全性中的审计级别调整为“全部”,身份验证调整为“SQL Server 和Windows”
3. SQL Server如何停用不必要的存储过程? 1、 参考配置操作
首先确认下面的扩展存储过程不会被使用,然后删除下面的这些存储过程。 去掉xp_cmdshell扩展存储过程,使用:
use master
sp_dropextendedproc 'xp_cmdshell'
同上类似语句,删除以下的扩展存储过程: Sp_OACreate Sp_OADestroy Sp_OAGetErrorInfo Sp_OAGetProperty Sp_OAMethod Sp_OASetProperty Sp_OAStop
Xp_regaddmultistring Xp_regdeletekey Xp_regdeletevalue Xp_regenumvalues Xp_regremovemultistring xp_sdidebug xp_availablemedia xp_cmdshell xp_deletemail xp_dirtree
xp_dropwebtask xp_dsninfo xp_enumdsn xp_enumerrorlogs xp_enumgroups xp_enumqueuedtasks xp_eventlog xp_findnextmsg xp_fixeddrives xp_getfiledetails xp_getnetname xp_grantlogin xp_logevent xp_loginconfig xp_logininfo xp_makewebtask xp_msver xp_perfend xp_perfmonitor xp_perfsample xp_perfstart xp_readerrorlog
xp_readmail xp_revokelogin xp_runwebtask xp_schedulersignal xp_sendmail xp_servicecontrol xp_snmp_getstate xp_snmp_raisetrap xp_sprintf xp_sqlinventory xp_sqlregister xp_sqltrace xp_sscanf xp_startmail xp_stopmail xp_subdirs xp_unc_to_drive xp_dirtree
SQL Server DBC遇到的面试题 Q. 我的SQL Server数据表中有一列允许为空(NULL)值。在该列有非空值的时候,我想让该列的值为唯一值。通过编程实现这一目标的最佳做法是什么呢?如果我在该列中设置一
个UNIQUE约束,我可以只在一个记录中保有空值。我正在使用触发器来强制执行这个限制,但是你能推荐一种更简单的方法来确保所有非空的值都是唯一的吗?
A. SQL Server没有内置的机制可以禁止非空值产生重复,所以你需要使用一个自定义的CHECK约束来实现这个限制。例如,以下代码就可以实现你所要的那种完整性。 USE tempdb
Create table t1 (c1 int NULL, c2 char(5) NULL) Create trigger mytrigger on t1 for insert, update as BEGIN
IF (select max(cnt) from (select count(i.c1) as cnt from t1, inserted i where t1.c1=i.c1 group by i.c1) x) > 1 ROLLBACK TRAN END
在SQL Server 2000中,你还可以使用INSTEAD OF触发器来执行这个限制。同INSTEAD OF触发器有关的更多信息,请参阅以下文章,要查看这些文章,请访问SQL Server Magazine,在InstantDoc(快速文档)框中输入InstantDoc编号,然后点击“Go”。文章包括:
INSTEAD OF触发器的使用窍门;InstantDoc编号 15828 视图中的INSTEAD OF触发器;InstantDoc 编号 15791 INSTEAD OF触发器;InstantDoc 编号 15524 SQL Server Profiler和参数化语句
问:自从升级到SQL Server 2000后,我在SQL事件查看器中遇到了一个问题:我无法捕获带有参数的Transact-SQL语句。我希望获得查询执行过程中参数的实际取值,而并非诸如@p1这样的参数形式。请问如何在不引用跟踪过程中其它行的情况下对参数取值加以置换。
答:您必须获取跟踪过程的其它部分(如存储过程StmtCompleted所返回的结果),并将这些部分收集在一起(语句放在最前面)以捕获完整的查询内容。之所以会出现这样的结果,其原因在于从SQL Server关系型引擎恢复数据的SQL事件查看器方法。这样的问题在SQL Server 7.0中同样存在。然而,由于当事件产生时,位于引擎内部的参数取值是未知的,因此,我们无法在这一时刻做出修改。 将一个SQL Server系统用作一台PDC
问:我的公司建立了一个灾难恢复站点,并且计划在一台新配备的计算机上安装SQL Server。Microsoft Windows NT管理员希望使用运行SQL Server的计算机作为主域控制器(PDC)。我听说,由于PDC需要完整维护与复制网络帐号数据库所引发的资源密集型任务并且需要执行网络登陆验证操作,因此,这种配置方案并非一种良好的方式。那么,请问
运行SQL Server的计算机能够转而充当备份域控制器(BDC)呢?从技术上讲,将SQL Server配置为PDC或BDC是否可能呢?
答:当您在PDC或BDC上安装SQL Server时,它仍可保持良好的工作状态。如需确定某种配置方案能否适应于您的站点,应当考虑您所拥有的资源。如果您拥有足够的网络带宽、内存空间与空闲处理器,那么,使用运行SQL Server的计算机作为域控制器便是一种合理的方案。然而,在这种情况下,根据域的实际规模,相应的计算机可能需要承担大量工作负载。如果您认为SQL Server的任务将会非常繁重,那么,便请不要再让其运行任何其它服务。
测试你对数据库了解了多少,SQL数据库面试题 SQL数据库面试题 1、SQL SREVER中,向一个表中插入了新数据,如何快捷的得到自增量字段的当前值 这种情况其实我们经常用到,比如我们新建了一个用户,建立完用户后我们希望马上得到这个新用户的ID,因为我们一般都是把这种用户ID的字段设置成自增长类型的,乍看起来好像没有要得到那个新ID很麻烦,其实sql server内置了一些全局的变量,使我们很容易就得到那个新的自增字段的ID,就是使用@@IDENTITY。 在一条 INSERT、SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含语句生成的最后一个标识值。如果语句未影响任何包含标识列的表,则 @@IDENTITY 返回 NULL。如果插入了多个行,生成了多个标识值,则 @@IDENTITY 将返回最后生成的标识值。如果语句触发了一个或多个触发器,该触发器又执行了生成标识值的插入操作,那么,在语句执行后立即调用 @@IDENTITY 将返回触发器生成的最后一个标识值。 在具体应用中可以这样来写SQL语句: string strSql = “INSERT INTO [User]([Name],[LoginName],[Pwd],[RegTime],[IsSuper],[Remark])” + “VALUES(@Name,@LoginName,@Pwd,@RegTime,@IsSuper,@Remark);select
@@IDENTITY ;”; 执行的时候直接用command.ExecuteScalar();就可以了,能直接返回该条记录的UserID; 解答二: 经过实验,得如下结论: select DISTINCT @@IDENTITY as iden from FaWen 解释:上述语句对 SQL SERVER 的一个会话,也就是一条连接,返回该连接最后一条插入记录得到的自增字段的值。 假设有3个程序,分别连接SQL SERVER,有三个连接。3个程序都向同一个表依顺序插入数据,得到的值分别是1、2、3,那么,只要3个程序对SQL的连接还保持着,第一个程序使用上述语句,将得到1,而不是3,第二个程序将得到2,也不是3。第三个程序得到3。 因此,用上述语句可以得到自己刚才插入记录的自增字段的值,不怕其它程序的并发插入操作。 上述语句中,使用 DISTINCT 的原因是,虽然返回的值是当前连接插入操作得到的最大值,但返回的相同值的记录有多条。条数等于当前多个连接一共插入的记录数。 实验方法:启动三个 Query analyzer 查询分析器,分别执行插入操作后再做上述取自增字段值的操作 我利用 rs.addnew 增加一条记录时,如何同时获取自增1字段ID的当前值,而无须再进行一次查询来获取!因为我立即要用到该ID值,如果在增加记录完毕后再利用select id 进行一次查询无疑会使系统受限,有办法吗? 如果你能保证id=行数的话可以用 rs.moveend ‘当指针在最后一条记录时count是全部行数 rs.count 2、什么叫做SQL注入,如何防止?请举例说明 SQL注入就是在正常的SQL执行语句中恶意插入攻击者想要运行的sql语句,比如,我们有一个方法是这么写的: public static bool Login(string loginName,string pwd) { string strSql = string.Format(“select * from [User] where LoginName = ‘{0}’ and Pwd = ‘{1}’ “,loginName,pwd); ? } 如果我传给loginname的值是’ or 1=1–,那么这个sql语句成了select * from [User] where LoginName = ” or 1=1–’,这样不管我密码输入什
么,肯定都是符合条件的。当然这只是最简单的情况,如果我把loginname的值改成’ or 1=1;delete from [user]–,那么后果不堪设想,如果我通过sql来执行net use相关的命令,就可能在服务器上给自己加一个帐号,这样就逐步可以控制整个数据库所在的服务器。。。 这就是sql注入的通常方法和可能的损害。 要放置其实也很简单,可以通过至少两个方法来进行: 1.最根本的,不实用组合sql的方法,而是通过使用命令参数方式来执行命令,比如我们把sql改成这种方式: string strSql = “select * from [user] where LoginName =@LoginName and Pwd =@Pwd “; ,然后通过sqlcommand来执行它,就可以从根本上解决这个问题。 2.控制参数的长度。因为要想进行sql注入的话,需要一定长度的字符串才能执行,如果我们规定LoginName 的长度最长不超过8个,一般不会造成损害,当然这个只是在特殊的情况下才使用,比如有些情况可能不能使用命令参数方式。 点评: sql注入是我们编程时必须考虑的问题,特别是BS的程序,更是要严格检查是否有sql注入的漏洞。最关键的一点是,你要明白怎么解决这个问题,一般面试人员会希望你提高使用参数方式来防止注入。 3、游标的作用?如何知道游标已经到了最后? 关系数据库中的操作会对整个行集起作用。由 SELECT 语句返回的行集包括满足该语句的 WHERE 子句中条件的所有行。这种由语句返回的完整行集称为结果集。应用程序,特别是交互式联机应用程序,并不总能将整个结果集作为一个单元来有效地处理。这些应用程序需要一种机制以便每次处理一行或一部分行。游标就是提供这种机制的对结果集的一种扩展。 游标的特点是: 允许定位在结果集的特定行。 从结果集的当前位置检索一行或一部分行。 支持对结果集中当前位置的行进行数据修改。 为由其他用户对显示在结果集中的数据库数据所做的更改提供不同级别的可见性支持。 提供脚本、存储过程和触发器中用于访问结果集中的数据的 Transact-SQL 语句 在从游标中提取信息后,可以通过判断@@FETCH_STATUS 的值来判断是否到了最后。当@@FETCH_STATUS为0的时候,说明提取是成功的,否则就可以认为到了最后。 点评: 游标是进行数据库操作的一个重要概念,但是在现代的软件开发中应用的不是很多,只有在一些特殊的存储过程中才会应用。但是,毕竟这是一个很重要,也是我们必须掌握的概念,最好能理解它的原理和用法。 4、SQL Server的两种索引是何形式?索引的作用?索引的优缺点? sql server的索引分为聚集索引和非聚集索引,下面分别说明: 聚集索引 聚集索引根据数据行的键值在表或视图中排序和存储这些数据行。索引定义中包含聚集索引列。每个表只能有一个聚集索引,因为数据行本身只能按一个顺序排序。 只有当表包含聚集索引时,表中的数据行才按排序顺序存储。如果表具有聚集索引,则该表称为聚集表。如果表没有聚集索引,则其数据行存储在一个称为堆的无序结构中。 非聚集索引 非聚集索引具有独立于数据行的结构。非聚集索引包含非聚集索引键值,并且每个键值项都有指向包含该键值的数据行的指针。 从非聚集索引中的索引行指向数据行的指针称为行定位器。行定位器的结构取决于数据页是存储在堆中还是聚集表中。对于堆,行定位器是指向行的指针。对于聚集表,行定位器是聚集索引键。 索引的作用主要是为了在查询时提高查询的效率,并且尽量减小更新时的开销。 优点: 设计良好的索引查询效率可以得到极大的提高,某些情况下甚至可以提高几百上千倍。 缺点: 需要占用额外的空间和资源。在更新时耗费的时间更大,因为对数据的更新很有可能会导致索引的更新,这样就会导致增加系统开销。 点评: 在所有的进行系统优化的选择中,索引都是第一位的,一个设计良好的数据库肯定需要高超的索引设计技巧,在这方面效率提高不是一倍两倍的问题,而是可能会有质的飞跃,对索引优化的重要性,在一个大型项目里,怎么说都不为过。但是,索引优化又是比较困难的,哪些列需要加入索引,列的顺序怎样,哪个索引需要设置为聚集索引等等,都是我们必须要考虑的问题。 5、事务是什么? 事务是单个的工作单元。如果某一事务成功,则在该事务中进行的所有数据修改均会提交,成为数据库中的永久组成部分。 如果事务遇到错误且必须取消或回滚,则所有数据修改均被清除。 也就是说,事务是由一系
列的“原子”操作组成的,这些原子操作必须全部完成,否则所有的动作都会被取消并恢复到初始状态。 开始事务使用BEGIN TRANSACTION 语句显,以 COMMIT 或 ROLLBACK 语句结束。 以上是针对数据库来说的。 但是,事务不仅仅限于数据库,数据库以外的动作也可以被组合进事务中,一般称为“企业级事务”。举一个例子:我们有这两个操作必须都完成,即在向数据库插入一条记录后必须在硬盘的某个文件夹内创建一个文件,这个就是一个企业级事务,它超出了简单的数据库事务的范畴。我们可以通过编程来实现企业级事务。 点评: 事务是数据库开发中一个非常重要的概念,它对与保证数据库的完整性和一致性非常重要。对于事务的的C#代码实现更是务必要熟练掌握。 6、存储过程和函数的区别 ?存储过程,功能强大,可以执行包括修改表等一系列数据库操作,也可以创建为 SQL Server 启动时自动运行的存储过程。 ?自定义函数,用户定义函数不能用于执行一组修改全局数据库状态的操作。 ?存储过程,可以使用非确定函数。 ?自定义函数,不允许在用户定义函数主体中内置非确定函数。 ?存储过程,可返回记录集。 ?自定义函数,可以返回表变量,也可以有任意个输出参数, ?存储过程,其返回值不能被直接引用,必须单独调用 ?自定义函数,其返回值可以被直接引用,也就是可以直接 select * from 函数
sqlservlet面试题 1.在数据库技术中,独立于计算机系统的模型是E-R模型。 2.数据库系统的控制中枢是 数据库管理系统。
3.使用SQL命令将学生表STUDENT中的学生年龄AGE字段的值增加1岁,应该使用的命令式 UPDATE STUDENT SET AGE=AGE+1.
4.在关系数据库中,建立数据库表时,将年龄字段值限制在12—40岁之间的这种约束属于 域完整性约束。
5.在SQL语句中,与 x BETWEEN 20 AND 30 等价的表达式是 x>=20 and x<=30 6.在数据库中,概念模型是 用于信息世界的建模,与具体的DBMS无关。 7.在关系数据库中,模式对应的是 视图和所有基本表。 8.数据库的并发操作可能带来的问题包括 丢失更新。
9.能实现绝对的与平台无关性的web数据库访问技术是 JDBC。 10.SQL是集合操作方式。 11.数据库系统是由数据库组成的。
12.在SQL查询时,使用WHERE子句指出的是 查询条件。 13.在RDMBS产品中,属于小型数据库系统的是 ACCESS。 14.数据库类型是按照数据模型来划分的。
15.数据库管理系统更适合于 数据处理 方面的应用。
16.CREATE,DROP,GRANT全部属于数据定义语句的命令。 17.用过INTERNET及浏览器处理的数据库,应该是主从结构式处理。 18.数据的逻辑独立性是指 数据与程序的逻辑独立性。 19.关系代数的三个基本运算时连接,投影,选择
20.用二维表来表示实体及实体之间联系的数据模型称为 关系模型。 21.在基本SQL中不可以实现 并发控制。
22.数据库镜像可以用于进行数据库恢复或并发操作。 23.在数据库系统中,应用最广泛的是 关系型数据库系统。
请问在sql2000中怎么区分登入,用户,角色,并用例子举例说明 (1)登入id是不是就是用户名(当我创建了一个登入, 我在点击登入所对应的数据,实例中的用户一栏看到登入id与用户名一致)
(2)一个登入id是不是只能对应一个用户
教科书答案:登录 id 仅能使您连接到 sql server 实例。特定数据库内的权限由用户帐户控制。数据库管理员将您的登录帐户映射到您有权访问的任何数据库中的用户帐户 用户如:sa
角色如:public/db_owner/db_datareader/db_datawriter等 只有给用户赋予角色,该用户才有相应的操作数据库的权限
如将public/db_owner角色赋给sa,则该用户有对数据库进行一切操作的权限
角色:完成特定的、与服务器相关的管理任务所需的权限,一个用户可以属于多个角色。 登录:仅能使您连接到 sql server 实例。 命题官的理解:
登录是sql实例级的 用户是数据库级的
角色有实例级和数据库级两种 登录决定你是否能访问sql实例
用户与登录对应, 确实某个登录后, 它对那些数据库有那些权限.
角色是为了方便管理一类登录或者用户所具有的权限, 当某一类登录或者用户具有相同的权限时, 可以简单地给予他们对应的角色即可. 做个形象的比喻:
sql实例就相当于一个公司.
如果你要在公司工作自然就要成为公司的员工, 因此公司的员工就相当于登录
公司有不同的部门, 这相当于数据库, 你要在某个部门做事, 必须把你分配到某个部门, 也就是在部门的名单中要有你, 这个部门的名单就相当于用户. 名单必须对应公司的某个员工.
但你一个人是可以在多个部门工作的
因此, 一个登录可以对应多个数据库的不同用户. 同样, 一个员工在一个部门的名单中只可能出现一次 因此, 一个登录在同一数据库中, 只可能对应一个用户
为了方便定义每个员工应该做些什么, 应该承担什么职责, 公司会定义职位, 我个职位对应的, 在数据库中就叫角色.
因为有的职位是公司层面的, 比如懂事长, 他什么都可以管 因此, 有sql实例级的角色
也可以具体地为每个部位定义职位, 不同部门的同一名称的职位它的具体内容可以不同.
因此,对应于sql而言, 它又有数据库级的角色
某个员工是某个职位, 则具有该职位对应的权限与责任
因此, 对于sql而言, 某个登录或者用户被授予某个或者某些角色, 它就具有对应的权限.
不同职位, 在不同时期, 可以由不人担任, 换人只需要取消和授予对应人员的职位就可以了. 不用改职位定义.
因此, 对于sql而言, 可以根据需要取消和授予某个登录或者用户的角色.
(这是管理方便性需要, 你完全可以不理会角色, 自己为用户或者登录指定权限)
sql server dba 面试笔试问题 很多开发人员都想成为一名DBA,也有很多人一开始就把自己定位成为一名DBA,DBA究竟需要掌握些什么知识和技能呢?以下是我做DBA工作和面试DBA时,整理的一些DBA方面的三十个问题,三十个大问题中还有许多小的问题,涵括了SQLServer DBA比较多的技术知识点,与大家分享下,希望给有志做DBA的朋友们一些帮助:
1. char、varchar、nvarchar之间的区别(包括用途和空间占用);xml类型查找某个节点的数据有哪些方法,哪个效率高;使用存储过程和使用T-SQL查询数据有啥不一样;
2. 系统DB有哪些,都有什么作用,需不需要做备份,为什么;损坏了如何做还原(主要是master库);
3. 有哪些操作会使用到TempDB;如果TempDB异常变大,可能的原因是什么,该如何处理; 4. Index有哪些类型,它们的区别和实现原理是什么,索引有啥优点和缺点;如何为SQL语句创建合适的索引,索引创建时有哪些需要注意的项,如何查看你创建的索引是否被使用;如何维护索引;索引损坏如何检查,怎么修复;T-SQL有更好的索引存在,但是运行时并没有使用该索引,原因可能是什么;
5. 视图上我们能建索引吗,如果能建的话,会啥好处和坏处;视图上建索引和表上建索引有啥区别;
6. Job信息我们可以通过哪些表获取;系统正在运行的语句可以通过哪些视图获取;如何获取某个T-SQL语句的IO、Time等信息;
7. 在线系统,一个表有五千万记录,现在要你将其中的两千万条记录导入到另一台服务器的某个表中,导完后,需要将这两千万数据删除,你预备如何处理,优缺点是什么; 8. 数据库服务器报磁盘空间不足,你将如何应对,要求尽快恢复;
9. 临时表、表变量、CTE(公用表表达式)有啥区别和联系,保存位置有啥不一样,使用时如何决定选哪种;
10. SQLServer有哪些隔离级别,默认级别是哪个;数据库有哪些主要的锁类型;行版本控制是如何实现的;
11. 死锁如何跟踪;阻塞如何跟踪和查找;发现有问题的语句后,如何进行处理;用Profile做跟踪时,一般我们需要跟踪哪些事件;
12. Windows日志主要有哪几种,SQLServer日志一般保留几个,什么情况下会产生新的SQL日志;数据库日志恢复模式有哪几种,区别是什么;数据库日志突然变得很大,而且你无
法收缩,可能的原因是什么,怎么查找原因,分别将如何处理;
13. 分区表和分区视图是什么概念,一般是在什么情况下使用,有啥好处;
14. 如何比较两个同结构的表数据的差异;如果表损坏了,如何修复;如何在备份文件有问题的情况下尽量还原数据;如何将一个表的Identity属性归零;
15. CheckPoint和LazyWriter区别;DDL Trigger 和 DML Trigger有啥用,区别是啥; 16. Mirroring 和Logshipping 的区别和使用场景;SQLServer的Mirroring与Oracle的哪像技术比较接近,它们的区别是啥;
17. Mirroring的搭建步骤,Mirroring三种模式区别,Mirroring 中同步和异步的原理和要求,搭建了Mirroring后,需要对数据库日志做什么处理;
18. Replication配置和使用场景;Replication有哪几种模式;PUSH和PULL有啥区别;搭建Replication后会产生一个什么库;报错时用什么来查看报错的具体语句,清理掉某个库的Replication使用什么语句,查看同步链信息主要通过哪些表;
19. Replication发布端的表能truncate吗,为什么;Replication Identity列如何处理、缺失字段错误如何处理、主键冲突错误如何处理、如何跳过指定的错误、订阅端表被删除了如何处理、大规模改动数据如何处理;某条同步链因为其中的某个表一次性改动数据很大造成同步链的严重延时,要求尽快恢复同步链,如何处理。
20. SSB(Service Broker)使用场景,如何创建,都会创建些什么对象,有啥优缺点,主要通过什么方式实现不同服务器之间的消息传递;可以通过哪些方式排错;
21. 跟踪数据库数据的变更有哪些方法,它们(CDC(Change Data Capture)、CT(Change Tracking)、Trigger等)使用上的优缺点;
22. SQL调优步骤,如何来判断SQL语句存在问题,怎么定位问题,如何解决这些问题; 23. 数据库故障排查步骤,如何处理紧急数据库问题;
24. 如何考虑和制定数据库备份计划;公司要求对一个非常大的数据库或者表做备份,而且要求数据量尽可能少丢失,你可能会采用什么方法;
25. 如果要你做数据库监控,你会关注那些指标(包括SQLServer和Windows),如何制定性能基线,你使用过哪些监控软件;
26. 数据库迁移步骤;重建一套比较大的测试系统(最少10个数据库实例),如果原来DB数据量都不大,但DB比较多,新搭建的系统数据都不需要,如何快速实现;
27. 创建Cluster 简要步骤,最少需要几个IP,需要安装些什么服务,需要哪些固定的磁盘,Raid如何设置,磁盘如何划分;SQLServerCluster与Mysql Cluster 和 Oracle RAC的区别等;
28. 如果遇到一个性能不理想、代码复杂的存储过程,很难通过数据库方面的调优来解决问题,你如何说服开发人员修改它(可能开发人员并不愿意修改);
29. 你有没有遇到过因为你的误操作造成系统故障发生的情况,你当时是如何处理的;如果没有,假定你误删了一个重要的表,你该如何处理;
30. 你准备成为一名什么样的DBA,为此你将如何准备(或者你有怎样的职业规划,准备怎样度过你的DBA生涯);如果你进入公司,你最想获得的是什么。
sql server中count(*),count(col),count(1)的区别 前言
记得很早以前就有人跟我说过,在使用count的时候要用count(1)而不要用count(*),因为使用count(*)的时候会对所有的列进行扫描,相比而言count(1)不用扫描所有列,所以count(1)要快一些。当时是对这一结论深信不疑,虽然不知道为什么。今天正好有时间研究研究看count(*)和count(1)到底有没有性能差异。 我的测试环境是SQL Server 2005 SP2开发版。 在进行测试之前先建立一些测试的数据,代码如下: create table test(a int, b varchar(100)) go
declare @n int set @n = 1 while @n < 100000 begin if @n%3 = 0
insert into test values (@n, null) if @n%3 = 1
insert into test values (@n, str(@n)) if @n%3 = 2
insert into test values (@n, ‘this is text’) set @n = @n+1 end
这里先说明一下,为了测试的目的,test表里面是故意没有加索引的。 count(*)与count(1)的对比
现在我们开始验证count(*)和count(1)的区别,验证方法很简单,如果两个语句执行效率不一样的话它们的查询计划肯定会不一样的,我们先执行set showplan_text on打开SQL执行计划显示,然后我们执行相应的SQL语句。 先是count(*): select count(*) from test
/*————————————————————————— ====== 下面是执行计划 ======
|–Compute Scalar(DEFINE:([Expr1004]=CONVERT_IMPLICIT(int,[Expr1005],0))) |–Stream Aggregate(DEFINE:([Expr1005]=Count(*))) |–Table Scan(OBJECT:([AdventureWorks].[dbo].[test]))
————————————————————————–*/ 接着count(1): select count(1) from test
/*————————————————————————— ====== 下面是执行计划 ======
|–Compute Scalar(DEFINE:([Expr1004]=CONVERT_IMPLICIT(int,[Expr1005],0))) |–Stream Aggregate(DEFINE:([Expr1005]=Count(*))) |–Table Scan(OBJECT:([AdventureWorks].[dbo].[test])) ————————————————————————–*/
对比下两个执行计划我们可以发现是完全一样的,这也就说明count(*)和count(1)的执行效率是完全一样的,根本不存在所谓的单列扫描和多列扫描的问题。 count(col)与count(*)的对比
同样,我们先看一下两个不同count方式的执行计划。 count(*)的执行计划看上面的例子。 count(b)的执行计划: select count(b) from test
/*————————————————————————— ====== 下面是执行计划 ======
|–Compute Scalar(DEFINE:([Expr1004]=CONVERT_IMPLICIT(int,[Expr1005],0))) |–Stream Aggregate(DEFINE:([Expr1005]=COUNT([AdventureWorks].[dbo].[test].))) |–Table Scan(OBJECT:([AdventureWorks].[dbo].[test])) ————————————————————————–*/
现在能看到这两个执行计划唯一不同的地方就是COUNT的内容,对于count(*)是”|—Stream Aggregate(DEFINE:([Expr1005]=count(*)))”,对于是
count(b)
”|—Stream
Aggregate(DEFINE:([Expr1005]=COUNT([AdventureWorks].[dbo].[test].)))”,那这两种count方式会不会有什么不一样呢?
让我们先看一下BOL里面对count(*)以及count(col)的说明: COUNT(*) 返回组中的项数。包括 NULL 值和重复项。
COUNT(ALL expression) 对组中的每一行都计算 expression 并返回非空值的数量。 expression
除 text、image 或 ntext 以外任何类型的表达式。不允许使用聚合函数和子查询。
*
指定应该计算所有行以返回表中行的总数。COUNT(*) 不需要任何参数,而且不
能与 DISTINCT 一起使用。
COUNT(*) 不需要 expression 参数,因为根据定义,该函数不使用有关任何特定列的信息。
COUNT(*) 返回指定表中行数而不删除副本。它对各行分别计数。包括包含空值的行。
也就是说count(*)只是返回表中行数,因此SQL Server在处理count(*)的时候只需要找到属于表的数据块块头,然后计算一下行数就行了,而不用去读取里面数据列的数据。而对于count(col)就不一样了,为了去除col列中包含的NULL行,SQL Server必须读取该col的每一行的值,然后确认下是否为NULL,然后在进行计数。因此count(*)应该是比count(col)快的,下面我们来验证一下。 我们通过在同样的条件下将select count(?) from test执行1000次来看两种count方式是否是一样的: 先看count(*)
declare @n int, @a int set @n = 1
while @n <= 1000 begin
select @a = count(*) from test set @n = @n+1 end
/*—————————— 执行结果:29s
—————————–*/ 接着看count(col)
declare @n int, @a int set @n = 1
while @n <= 1000 begin
select @a = count(b) from test set @n = @n+1 end
/*—————————— 执行结果:57s
—————————–*/
从执行结果可以看出相差还是很大的,count(*)比count(col)快了一倍。 不过因为count(*)和count(col)使用的目的是不一样的,在必须要使用count(col)的时候还是要用的,只是在统计表全部行数的时候count(*)就是最佳的选择了。
另外:这里用到的跑1000次的方法也可以用在比较count(*)和count(1)上,在这里你将得到两个一样的执行时间。 count(col)与count(distinct col)比较 同样,我们先对比一下两个执行计划。
select count(b) from test
/*————————————————————————— ====== 下面是执行计划 ====== |–Compute
Scalar(DEFINE:([Expr1004]=CONVERT_IMPLICIT(int,[Expr1005],0))) |–Stream
Aggregate(DEFINE:([Expr1005]=COUNT([AdventureWorks].[dbo].[test].))) |–Table Scan(OBJECT:([AdventureWorks].[dbo].[test])) ————————————————————————–*/ select count(distinct b) from test
/*————————————————————————— ====== 下面是执行计划 ====== |–Compute
Scalar(DEFINE:([Expr1004]=CONVERT_IMPLICIT(int,[Expr1007],0))) |–Stream
Aggregate(DEFINE:([Expr1007]=COUNT([AdventureWorks].[dbo].[test].))) |–Hash Match(Aggregate, HASH:([AdventureWorks].[dbo].[test].), RESIDUAL:([AdventureWorks].[dbo].[test]. = [AdventureWorks].[dbo].[test].))
|–Table Scan(OBJECT:([AdventureWorks].[dbo].[test])) ————————————————————————–*/ 从执行计划我们可以看到,因为表test没有索引,在执行count(distinct col)的时候是通过Hash Match的方式来查找相同值的行,这显然会耗费大量的CPU,同时我们也可以知道count(col)能比count(distinct col)快很多的。(如果test的列b有索引的话count(distinct col)的方式会不一样,走的是group by,但同样还是会比count(col)慢的,这个大家可以自己试一下)。 我们可以同样做一个执行1000次看花费的时间来做一个直观的对比。 declare @n int, @a int set @n = 1
while @n <= 1000 begin
select @a = count(b) from test set @n = @n+1 end
/*—————————— 执行结果:57s
—————————–*/ declare @n int, @a int set @n = 1
while @n <= 1000
begin
select @a = count(distinct b) from test set @n = @n+1 end
/*—————————— 执行结果:2min 36s —————————–*/
索引与count的关系
我们上面讨论的都是表的索引结构不变的情况下count的变化,在表索引不变时对表做全表扫描所消耗的IO是不变的,不管是采取那种方式。现在在这里我们将看看不同类型的表索引对count会有什么样的变化,因为索引结构的改变对IO影响是最大的,在这里我们注重关注IO的变化情况。
先罗列一下我们要用到的SQL语句,包括查看IO,TIME、执行计划以及建立索引的。
– 打开IO显示
set statistics io on – 打开执行时间显示 set statistics time on – 打开执行计划显示 set showplan_text on
– 建立聚集索引pk_test
create clustered index pk_test on test (a) – 建立非聚集索引ix_a
create index ix_a on test (a) – 建立非聚集索引ix_b
create index ix_b on test (b)
堆表和聚集索引表上的count(*)
在这里我们先取得test没有建立索引之前执行count(*)的消耗,然后再在test上对a列建立一个聚集索引,然后再看看同样语句的执行计划和IO。 select count(*) from test
/*————————————————————————— ====== 对于堆表的执行计划 ===== |–Compute
Scalar(DEFINE:([Expr1004]=CONVERT_IMPLICIT(int,[Expr1005],0))) |–Stream Aggregate(DEFINE:([Expr1005]=Count(*))) |–Table Scan(OBJECT:([AdventureWorks].[dbo].[test])) ====== 对于堆表的执行时间和IO ===== SQL Server 分析和编译时间:
CPU 时间 = 0 毫秒,占用时间 = 2 毫秒。
(1 行受影响)
表 ‘test’。扫描计数 1,逻辑读取 302 次,物理读取 0 次,预读 0 次, lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 SQL Server 执行时间:
CPU 时间 = 31 毫秒,占用时间 = 33 毫秒。
—————————————————————————– ====== 对于聚集索引表的执行计划 ===== |–Compute
Scalar(DEFINE:([Expr1004]=CONVERT_IMPLICIT(int,[Expr1005],0))) |–Stream Aggregate(DEFINE:([Expr1005]=Count(*))) |–Clustered Index Scan(OBJECT:([AdventureWorks].[dbo].[test].[pk_test])) ====== 对于聚集索引的执行时间和IO ===== SQL Server 分析和编译时间:
CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。
(1 行受影响)
表 ‘test’。扫描计数 1,逻辑读取 304 次,物理读取 0 次,预读 0 次, lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
SQL Server 执行时间:
CPU 时间 = 31 毫秒,占用时间 = 34 毫秒。
—————————————————————————*/ 从实际测试我们可以看到,堆表和聚集索引表上的count是没有什么区别的,甚至于聚集索引表上的IO还要多2(这是因为多了两个聚集索引的数据块造成的)。如果你对聚集索引的结构很了解的话也是不难解释的:其实聚集索引并没有单独的保留所有索引列的信息,而只是将表中的行的物理顺序按照聚集索引列的顺序整理了一下,因此对聚集索引的扫描和对堆表的扫描是一样的,没有什么本质上的区别。
因此聚集索引对于count来说是没有帮助的。
非聚集索引上的count
现在我们执行前面给出的语句为test表增加一个非聚集索引ix_a然后看看执行计划和IO情况。
select count(*) from test
/*————————————————————————— ====== 对于非聚集索引表的执行计划 ===== |–Compute
Scalar(DEFINE:([Expr1004]=CONVERT_IMPLICIT(int,[Expr1005],0))) |–Stream Aggregate(DEFINE:([Expr1005]=Count(*)))
|–Index Scan(OBJECT:([AdventureWorks].[dbo].[test].[ix_a])) ====== 对于非聚集索引表的执行时间和IO =====
SQL Server 分析和编译时间:
CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。
表 ‘test’。扫描计数 1,逻辑读取 126 次,物理读取 0 次,预读 0 次, lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
SQL Server 执行时间:
CPU 时间 = 31 毫秒,占用时间 = 32 毫秒。
—————————————————————————*/ 从执行结果可以看到,逻辑读的次数明显的减少了,因为计算行数这个操作对于全表扫描或是非聚集索引的扫描结果是一样的,而相对来说非聚集索引的数据量是肯定会比表的数据量小很多的,同样的做一次全部扫描所花费的IO也就要少很多了。
同样的对于一个count(col)的操作来说,对col的索引做count同样是能达到count(col)的目的的,相比全表扫描一样可以节省很多的IO操作。 select count(a) from test
/*————————————————————————— ====== 对于非聚集索引表的执行计划 ===== |–Compute
Scalar(DEFINE:([Expr1004]=CONVERT_IMPLICIT(int,[Expr1005],0))) |–Stream
Aggregate(DEFINE:([Expr1005]=COUNT([AdventureWorks].[dbo].[test].[a])))
|–Index Scan(OBJECT:([AdventureWorks].[dbo].[test].[ix_a])) ====== 对于非聚集索引表的执行时间和IO ===== SQL Server 分析和编译时间:
CPU 时间 = 0 毫秒,占用时间 = 1 毫秒。
表 ‘test’。扫描计数 1,逻辑读取 126 次,物理读取 0 次,预读 0 次, lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 SQL Server 执行时间:
CPU 时间 = 46 毫秒,占用时间 = 49 毫秒。
—————————————————————————*/ 结论
这里把上面实验的结果总结一下:
count(*)和count(1)执行的效率是完全一样的。
count(*)的执行效率比count(col)高,因此可以用count(*)的时候就不要去用count(col)。
count(col)的执行效率比count(distinct col)高,不过这个结论的意义不大,
这两种方法也是看需要去用。
如果是对特定的列做count的话建立这个列的非聚集索引能对count有很大的帮助。
如果经常count(*)的话则可以找一个最小的col建立非聚集索引以避免全表扫描而影响整体性能。
当然,在建立优化count的索引之前一定要考虑新建立的索引会不会对别的查询有影响,影响有多大,要充分考虑之后再决定是否要这个索引,这是很重要的一点,不要捡了芝麻丢了西瓜。
在数据文件自动增长时,自动增长是否会阻塞对文件的更新? 答: 不会,但是因为 SQL Server 阻塞了对分配页的更改,而分配页跟踪自动增长过程中所使用的文件部分,所以数据文件的自动增长阻塞了新扩展部分的分配。这些分配页是全局分配映射 (GAM) 和辅助 GAM (SGAM)。(请参阅 SQL Server Books Online-BOL 可以获得有关 GAM 和 SGAM 的详细信息。)因此,自动增长操作阻塞了扩展过程,因此其他操作无法使用扩展部分。例如,这种阻塞会影响需要分配新空间的 Insert 和 Update 操作。例如 Insert 和 Update 这样的操作必须等待自动增长操作完成后才能进行。自动增长不应该影响要收回现有未用空间的 Insert 操作,和使用原有空间执行的 Update 操作,以及将在页中留下自由空间的 Delete 操作。因为检索数据不会涉及任何新的空间分配,所以自动增长操作不会影响 Select 操作。
为什么在使用动态 SQL 语句时必须为低层数据库对象授予权限?
答: 出于安全原因需要这些权限。请考虑下列简单存储过程: USE pubs GO
Create PROCEDURE GeneralSelect @TableName SYSNAME AS
EXEC (‘Select * FROM ‘ + @TableName) GO
您可能希望您的存储过程发出一个与下面类似的调用: USE pubs
EXEC GeneralSelect ‘authors’
但是,请考虑传送给存储过程的下列顺序: USE pubs
EXEC GeneralSelect ‘authors Drop TABLE authors’
如果存储过程的创建者是 pubs 数据库中 db_owner 角色的成员,并且您的用户只需要对存储过程具有 EXECUTE ㄏ蓿蚋妹罱境?authors 表。SQL Server 通过要求用户证明具有对数据库对象(通过动态 SQL 语句引用的)的正确权限来保护数据免受未授权的操作。
介绍一下SQL Server的全文索引? 全文索引可以对存储在SQL Server数据库中的文本数据执行快速检索功能。同LIKE谓词不同,全文索引只对字符模式进行操作,对字和语句执行搜索功能。全文索引对于查询非结构化数据非常有效。一般情况下,可以对char、varchar和nvarchar数据类型的列创建全文索引,同时,还可以对二进制格式的列创建索引,如image和varbinary数据类型列。对于这些二进制数据,无法使用LIKE谓词。
为了对表创建全文索引,表必须包含单个、唯一、非空列。当执行全文检索的时候,SQL Server搜索引擎返回匹配搜索条件的行的键值。一般情况,使用sql server中的全文索引,经过大体4个步骤:
l 安装全文索引服务; l 为数据表建立全文索引目录; l 使全文索引与数据表内容同步; l 使用全文索引进行查询。
SQL Server里面什么样的视图才能创建索引? 在为视图创建索引前,视图本身必须满足以下条件:
l 视图以及视图中引用的所有表都必须在同一数据库中,并具有同一个所有者。 l 索引视图无需包含要供优化器使用的查询中引用的所有表。 l 必须先为视图创建唯一群集索引,然后才可以创建其它索引。
l 创建基表、视图和索引以及修改基表和视图中的数据时,必须正确设置某些 SET
选项(在本文档的后文中讨论)。另外,如果这些 SET 选项正确,查询优化器将不考虑索引视图。
l 视图必须使用架构绑定创建,视图中引用的任何用户定义的函数必须使用 SCHEMABINDING 选项创建。
l 另外,还要求有一定的磁盘空间来存放由索引视图定义的数据。
介绍一下SQL Server里面的索引视图? 复杂报表的场景经常会在数据仓储应用程序中遇到,它在查询过程中会对数据库服务器产生大量请求。当这些查询访问视图时,因为数据库将建立视图结果集所需的逻辑合并到从基本表数据建立完整查询结果集所需的逻辑中,所以性能将会下降。这一操作的开销可能会比较大,尤其当视图涉及到复杂的大量行处理–如大量数据聚合或多表联结时。因为结果集并不永久存放在数据库(标准视图)中,以后对该视图的访问可能导致在每次执行查询时建立结果集的代价。
SQL Server允许为视图创建独特的聚集索引,从而让访问此类视图的查询的性能得到极大地改善。在创建了这样一个索引后,视图将被执行,结果集将被存放在数据库中,存放的方式与带有聚集索引的表的存放方式相同。这就在数据库中有效地实现了查询结果。对于那些在FROM子句中不直接指定视图名的查询,SQL Server查询优化器将使用视图索引。现有查询将受益于从索引视图检索数据而无需重新编写程序原码的高效率。对于某些特定类型的视图,甚至可以获得指数级的性能改善。
如果在视图上创建索引,那么视图中的数据会被立即存储在数据库中,对索引视图进行修改,那么这些修改会立即反映到基础表中。同理,对基础表所进行的数据修改也会反映到索引视图那里。索引的惟一性大大提高了SQL Server 查找那些被修改的数据行。
维护索引视图比维护基础表的索引更为复杂。所以,如果认为值得以因数据修改而增加系统负担为代价来提高数据检索的速度,那么应该在视图上创建索引。
SQL Server提供的3种恢复模型都是什么? 有什么区别? SQL Server提供了3种恢复模型,分别是:
l 简单恢复 ,允许将数据库恢复到最新的备份。 l 完全恢复,允许将数据库恢复到故障点状态。 l 大容量日志记录恢复,允许大容量日志记录操作。
这些模型中的每个都是针对不同的性能、磁盘和磁带空间以及保护数据丢失的需要。例如,当选择恢复模型时,必须考虑下列业务要求之间的权衡: l 大规模操作的性能(如创建索引或大容量装载)。 l 数据丢失表现(如已提交的事务丢失)。 l 事务日志空间损耗 l 备份和恢复过程的简化。
根据正在执行的操作,可以有多个适合的模型。选择了恢复模型后,设计所需的备份和恢复过程。表6提供了三种恢复模型的优点和含义的概述。
表 6备份模型之间的比较
恢复模型 简单 优点 工作损失表现 能否恢复到即时点? 允许高性能大容量复制必须重做自最新的数据库可以恢复到任何备份的结尾操作。 或差异备份后所发生的更处。随后必须重做更改。 收回日志空间以使空间改。 要求最小。 完全 数据文件丢失或损坏不正常情况下没有。 会导致工作损失。 如果日志损坏,则必须重做可以恢复到任何即时点。 可以恢复到任意即时点自最新的日志备份后所发(例如,应用程序或用生的更改。 户错误之前)。 大容量日志记录允许高性能大容量复制如果日志损坏,或者自最新可以恢复到任何备份的结尾的 操作。大容量操作使用的日志备份后发生了大容处。随后必须重做更改。 最少的日志空间。 量操作,则必须重做自上次备份后所做的更改。否则不丢失任何工作。 简单恢复所需的管理最少。在简单恢复模型中,数据只能恢复到最新的完整数据库备份或差异备份的状态。不使用事务日志备份,而使用最小事务日志空间。一旦不再需要日志空间从服务器故障中恢复,日志空间便可重新使用。与完整模型或大容量日志记录模型相比,简单恢复模型更容易管理,但如果数据文件损坏,则数据损失表现会更高。
完全恢复和大容量日志记录恢复模型为数据提供了最大的保护性。这些模型依靠事务日志提供完全的可恢复性,并防止最大范围的故障情形所造成的工作损失。完全恢复模型提供最大
的灵活性,可将数据库恢复到更早的即时点。
大容量日志记录模型为某些大规模操作(如创建索引或大容量复制)提供了更高的性能和更低的日志空间损耗。不过这将牺牲时点恢复的某些灵活性。很多数据库都要经历大容量装载或索引创建的阶段,因此可能希望在大容量日志记录模型和完全恢复模型之间进行切换。
什么是聚集索引和非聚集索引? 分布介绍一下 (1)非聚集索引
非聚集索引与课本中的索引类似。数据存储在一个地方,索引存储在另一个地方,索引带有指针指向数据的存储位置。索引中的项目按索引键值的顺序存储,而表中的信息按另一种顺序存储(这可以由聚集索引规定)。如果在表中未创建聚集索引,则无法保证这些行具有任何特定的顺序。
典型的桌面数据库使用的是非聚集索引。在这类索引中,索引键值是有序的,而每个索引节点所指向的数据行是无序的。一个SQL Server表最多可以拥有255个非聚集索引。 非聚集索引与聚集索引一样有 B-树结构,但是有两个重大差别: l 数据行不按非聚集索引键的顺序排序和存储。 l 非聚集索引的叶层不包含数据页。
相反,叶节点包含索引行。每个索引行包含非聚集键值以及一个或多个行定位器,这些行定位器指向有该键值的数据行(如果索引不唯一,则可能是多行)。非聚集索引可以在有聚集索引的表、堆集或索引视图上定义。在 SQL Server中,非聚集索引中的行定位器有两种形式:
l 如果表是堆集(没有聚集索引),行定位器就是指向行的指针。该指针用文件标识符 (ID)、页码和页上的行数生成。整个指针称为行 ID。
l 如果表是堆集(没有聚集索引),行定位器就是指向行的指针。该指针用文件标识符 (ID)、页码和页上的行数生成。整个指针称为行 ID。
由于非聚集索引将聚集索引键作为其行指针存储,因此使聚集索引键尽可能小很重要。如果表还有非聚集索引,请不要选择大的列作为聚集索引的键。
在创建非聚集索引之前,应先了解您的数据是如何被访问的。可考虑将非聚集索引用于:
l 包含大量非重复值的列,如姓氏和名字的组合(如果聚集索引用于其它列)。如果只有很少的非重复值,如只有 1 和 0,则大多数查询将不使用索引,因为此时表扫描通常更有效。
l 不返回大型结果集的查询。
l 返回精确匹配的查询的搜索条件(WHERE 子句)中经常使用的列。
l 经常需要联接和分组的决策支持系统应用程序。应在联接和分组操作中使用的列上创建多个非聚集索引,在任何外键列上创建一个聚集索引。
l 在特定的查询中覆盖一个表中的所有列。这将完全消除对表或聚集索引的访问。 (2)聚集索引
聚集索引确定表中数据的物理顺序。聚集索引类似于电话簿,后者按姓氏排列数据。由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。但该索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组织一样。
聚集索引在系统数据库表sysindexes 内有一行,其 indid = 1。数据链内的页和其内的行按聚集索引键值排序。所有插入都在所插入行中的键值与排序顺序相匹配时执行。
SQL Server将索引组织为B-树。索引内的每一页包含一个页首,页首后面跟着索引行。每个索引行都包含一个键值以及一个指向较低级页或数据行的指针。索引的每个页称为索引节点。B-树的顶端节点称为根节点。索引的底层节点称为叶节点。每级索引中的页链接在双向链接列表中。在聚集索引内数据页组成叶节点。根和叶之间的任何索引级统称为中间级。 对于聚集索引,sysindexes.root 指向它的顶端。SQL Server 沿着聚集索引浏览以找到聚集索引键对应的行。为找到键的范围,SQL Server 浏览索引以找到这个范围的起始键值,然后用向前或向后指针扫描数据页。为找到数据页链的首页,SQL Server 从索引的根节点开始沿最左边的指针进行扫描.
聚集索引对于那些经常要搜索范围值的列特别有效。使用聚集索引找到包含第一个值的行后,便可以确保包含后续索引值的行在物理相邻。例如,如果应用程序执行的一个查询经常检索某一日期范围内的记录,则使用聚集索引可以迅速找到包含开始日期的行,然后检索表中所有相邻的行,直到到达结束日期。这样有助于提高此类查询的性能。同样,如果对从表中检索的数据进行排序时经常要用到某一列,则可以将该表在该列上聚集(物理排序),避免每次查询该列时都进行排序,从而节省成本。
对于聚集索引,人们往往有一些错误的认识。其中,最常见的错误有:
l 聚集索引会降低insert操作的速度,因为必须要向后移动一半的数据来为新插入的行腾出空间。这种认识是错误的,因为可以利用填充因子控制填充的百分比,从而在索引页上为新插入的数据保留空间。如果索引页填满了,SQL Server将会进行页拆分,在这种情况下只有第一个页才会受到影响。
l 在使用标识列的主键上创建聚集索引是一种好的设计方法,它可以使对表的操作达到最快速度。这种认识是错误的,它浪费了创建其它更有效的聚集索引的机会。并且,使用这种方法会把每个新插入的记录行都存储到表尾部的同一个的数据页中,这将导致数据库的热点和锁争用。笔者曾经见过采用这种方法设计的数据库,对于每一个新订单,客户服务人员都不得不等待数分钟来加以确认。
l 聚集索引是具有魔力的。如果哪个查询的速度不够快,那么就在该列上创建聚集索引,对于表的操作速度一定会得到提高。这种认识也是错误的,聚集索引只是比非聚集索引稍稍快了那么一点点。因为在每个表上只能创建一个聚集索引,所以它也是一种宝贵的性能资源,只有在那些经常作为条件查询一组记录行的列上才应该建立聚集索引。 在创建聚集索引之前,应先了解数据是如何被访问的。可考虑将聚集索引用于: l 包含大量非重复值的列。
l 使用下列运算符返回一个范围值的查询:BETWEEN、>、>=、< 和 <=。 l 被连续访问的列。 l 返回大型结果集的查询。
l 经常被使用联接或 GROUP BY 子句的查询访问的列;一般来说,这些是外键列。对 ORDER BY 或 GROUP BY 子句中指定的列进行索引,可以使 SQL Server 不必对数据进行排序,因为这些行已经排序。这样可以提高查询性能。
l OLTP 类型的应用程序,这些程序要求进行非常快速的单行查找(一般通过主键)。应在主键上创建聚集索引。 注意,聚集索引不适用于:
l 频繁更改的列,这将导致整行移动(因为 SQL Server 必须按物理顺序保留行中的数据值)。这一点要特别注意,因为在大数据量事务处理系统中数据是易失的。 l 宽键,来自聚集索引的键值由所有非聚集索引作为查找键使用,因此存储在每个非聚集索引的叶条目内。
正在阅读:
sql server面试题04-10
感恩的作文300字07-03
小学教育心理学试题及答案05-18
JAVA复习题答案10-24
外贸业务12-08
关于感恩的作文700字07-03
A公司收购并购B公司部分股权项目可行性商业计划书 - 图文03-24
轴对称章节培优习题ABC08-14
增强共青团员意识主题教育活动实施方案11-15
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 试题
- server
- sql
- 浅谈初中语文高效课堂之我见
- 农业部公益性行业科研专项项目指南
- 2018质量管理IATF16949最新版解读之管理过程乌龟图(完整版)
- 安泽县交通运输马壁乡石槽村至沁水界公路改造工程施工
- 标准化--班组
- C语言串讲笔记
- 消落带治理方案x
- 关于转发河北省老科协
- 机械设备安全操作规程 -
- 最新人教版八年级物理上册单元测试题全套及答案
- 2017.5.院感竞赛题
- 学术规范题库
- 重铬酸钾化学品安全技术说明
- 我国租赁权的物权化进路
- 中国连锁经营协会入会标准和管理办法-入会申请 - 图文
- 儿科护理学复习题及参考答案
- 简析答尔丢夫形象及其塑造
- 教科版2018年科学作业本参考答案
- 入党为什么现在做什么将来留什么大讨论发言稿
- 投资白银需防陷阱,谨防江红军诈骗方式