SQL Server 面试问答之 31 天汇总

  • Jonathan Allen
  • 高翌翔

2011 年 8 月 7 日

话题:.NETDevOps语言 & 开发

Pinal Dave 最近发布了名为“SQL Server——面试问题及答案”的博文,这系列博文由 31 个部分组成,始于诸如“规范化是什么?”等常规主题,进而拓展到诸如“在执行 ALTER DATABASE 期间,ROLLBACK IMMEDIATE 与 WITH NO_WAIT 之间的区别是什么?”等鲜为人知的主题。而且其中还涉及到数据仓库,甚至有些访客回复还提到了 SQL Azure。

为了吸引你去阅读他的系列博文,我们特意在这里引用了一些你即将学到的知识。例如,第 7 日中包括关于不同类型锁的内容。

  • 共享锁:用于不更改或不更新数据的操作(只读操作),比如 SELECT 语句。
  • 更新锁:用于可更新的资源。防止当多个会话在读取、锁定以及随后可能进行的资源更新时发生常见的死锁。
  • 排他锁:用于数据修改操作,比如 INSERT 、UPDATE、或 DELETE。确保不会同时对同一资源进行多重更新。
  • 意向锁:用于建立锁的层次结构。意向锁的类型如下:意向共享(IS)、意向排他(IX)、和意向排他共享 (SIX)。
  • 架构锁:在执行依赖于表架构的操作时使用。架构锁类型包括架构修改(Sch-M)和架构稳定性(Sch-S)。
  • 大容量更新锁:在向表进行大容量数据复制且指定了 TABLOCK 提示时使用。

此外,这系列文章还为在 T-SQL 下工作提供了很多小窍门,比如如何通过读取 @@Rowcount 或者 @@Recordcount 来清除存储在另一个变量中的值。

如果在 Error 检查语句之后检查 @@Rowcount,那么由于 @@Rowcount 将被复位,因此 @@Recordcount 将得到 0。而且如果在错误检查语句之前检查 @@Recordcount,那么 @@Error 将会复位。为了在同一时间获得 @@Error 和 @@Rowcount,我们应将二者包括在同一语句中并将它们存储在局部变量中。SELECT @RC = @@ROWCOUNT, @ER = @@ERROR

当你从 OLTP(On-Line Transaction Processing,联机事务处理)和规范化的表的世界迁移到需要 OLAP(On-Line Analytical Processing,联机分析处理)风格服务器的维度建模时,即使经验丰富的开发者可能也会发现这个系列是很有帮助的。

查看英文原文:31 Days of SQL Server Interview Questions and Answers

.NETDevOps语言 & 开发