第一部分 概述 3
第一章 Microsoft SQL Server的演变过程:从1989年到1999年 3
1.1 Ron的经历 5
1.2 Kalen的经历 7
1.3 Microsoft SQL Server的正式发布 7
1.4 开发角色的演变 9
1.5 OS/2和“友好的火力” 10
1.6 4.2版 11
1.6.1 OS/2 2.0的发布延迟了 12
1.6.2 4.2版本发布了 13
1.7 Windows NT上的SQL Server 13
1.8 成功带来的巨大变化 17
1.9 合作开发的结束 18
1.10 SQL95的费用 20
1.11 下一个版本 22
1.12 Sphinx的秘密 22
1.13 新的未来 24
第二章 游历SQL Server 25
2.1 SQL Server引擎 26
2.1.1 Transact-SQL 27
2.2 DBMS——强制性的数据完整性 31
2.2.1 说明性参照完整性 31
2.2.2 数据类型 32
2.2.3 CHECK约束和规则 33
2.2.4 默认值 33
2.2.5 触发器 33
2.3 事务处理 34
2.3.3 隔离性 35
2.3.1 原子性 35
2.3.2 一致性 35
2.3.4 持久性 36
2.4 对称的服务器结构 36
2.4.1 传统的进程/线程模型 36
2.4.2 SQL Server的进程/线程模型 37
2.4.3 多用户性能 37
2.5 安全性 38
2.5.1 监测与管理安全性 38
2.6 高度有效性 39
2.7 分布式的数据处理 40
2.8 数据复制 41
2.9.1 SQL Server Enterprise Manager 43
2.9 系统管理 43
2.9.2 分布式的管理对象 45
2.9.3 Automation和Visual Basic脚本 46
2.9.4 SQL Server Agent 47
2.10 SQL Server工具软件和扩展 48
2.10.1 Web Assistant Wizard和Internet Enabling 49
2.10.2 SQL Server Profiler 49
2.10.3 SQL Server Service Manager 50
2.10.4 与Windows NT“性能监视器”集成 50
2.10.5 Client Network实用程序 51
2.10.6 Server Network实用程序 51
2.10.7 SQL Server安装程序 52
2.10.8 ISQL和OSQL 52
2.10.11 SNMP集成 53
2.10.9 SQL Server Query Analyzer 53
2.10.10 大批量复制和Data Transformation Services 53
2.10.12 SQL Server Books Online 54
2.11 客户开发接口 54
2.11.1 ODBC 54
2.11.2 RDO 54
2.11.3 OLE DB 55
2.11.4 ADO 55
2.11.5 DB-Library 55
2.11.6 用于C语言的ESQL 55
2.11.7 服务器开发接口 56
2.12 小结 56
3.1 SQL Server引擎 59
3.1.1 网库 59
第三章 SQL Server的结构 59
第二部分 体系结构概述 59
3.1.2 开放式数据服务 62
3.1.3 关系引擎和存储引擎 66
3.1.4 访问方法管理器 70
3.1.5 行操作管理器和索引管理器 70
3.1.6 页管理器和文本管理器 74
3.1.7 事务管理器 75
3.1.8 加锁管理器 78
3.1.9 其他管理器 79
3.2 管理内存 79
3.2.1 缓冲区管理器和内存池 79
3.2.2 访问内存中的页 79
3.2.3 访问空闲页(惰性写入器) 80
3.2.4 检查点 82
3.2.5 利用缓冲区管理器来访问页 83
3.2.6 大内存问题 83
3.2.7 日志管理器 84
3.3 事务日志和恢复 85
3.3.1 加锁和恢复 87
3.3.2 页LSN和恢复 87
3.4 SQL Server的内核以及SQL Server与Windows NT的相互作用 89
3.4.1 线程和对称多处理 90
3.4.2 工作人员线程池 91
3.4.3 Windows NT上的磁盘I/O 93
3.5 小结 94
4.1 SQL Server版本 97
第四章 规划和安装SQL Server 97
第三部分 使用Microsoft SQL Server 97
4.1.1 用户连接 99
4.1.2 嵌入的SQL Server 99
4.2 硬件指导原则 99
4.2.1 使用Windows硬件兼容列表中的硬件 100
4.2.2 选择好的处理器 100
4.2.3 Performance=Fn(处理器周期、内存和I/O吞吐量) 101
4.2.4 测试程序投资 101
4.3 硬件组件 102
4.3.1 处理器 102
4.3.2 内存 104
4.3.3 磁盘驱动器、控制器和磁盘阵列 106
4.3.4 RAID方法 107
4.3.5 关于驱动器和控制器的进一步说明 115
4.3.6 不间断电源(UPS) 117
4.3.7 磁盘子系统 118
4.3.8 撤退型服务器功能 118
4.3.9 其他硬件方面的考虑 119
4.4 操作系统 120
4.5 文件系统 120
4.6 安全性和用户环境 121
4.7 许可协议 122
4.7.1 许可协议方案 124
4.7.2 Internet许可协议 124
4.7.3 许可协议限制 125
4.8 网络协议 127
4.9.1 字符集 130
4.9 字符集和排序顺序问题 130
4.9.2 排序顺序 132
4.10 安装SQL Server 136
4.11 安装后的基本配置 137
4.11.1 启动SQL Server Service 137
4.11.2 修改系统管理员密码 138
4.11.3 配置SQL Server的错误日志 138
4.12 远程安装和无人参与安装 139
4.12.1 远程安装 139
4.12.2 无人参与安装 140
4.12.3 修改安装选项 141
4.12.4 添加附加的组件 142
4.13 小结 142
第五章 数据库和数据库文件 143
5.1 指定系统数据库 144
5.1.1 master 144
5.1.2 model 144
5.1.3 tempdb 144
5.1.4 pubs 145
5.1.5 Northwind 145
5.1.6 msdb 146
5.2 数据库文件 146
5.3 创建数据库 147
5.3.1 CREATE DATABASE示例 149
5.4 扩展和收缩数据库 149
5.4.1 自动扩展文件 149
5.4.4 手动收缩文件 150
5.4.3 自动收缩文件 150
5.4.2 手工扩展文件 150
5.5 更改日志大小 151
5.6 数据库文件组 155
5.6.1 FILEGROUP CREATION示例 156
5.7 改变数据库 157
5.7.1 ALTER DATABASE示例 158
5.8 数据库内幕 159
5.8.1 空间的分配 161
5.9 数据库选项 163
5.9.1 更改数据库选项 167
5.10 有关数据库其他方面的考虑 168
5.10.1 数据库并不等于规划 168
5.10.2 可移动介质 168
5.10.3 兼容级别 169
5.11 小结 170
第六章 表 171
6.1 创建表 172
6.1.1 命名表和列 172
6.1.2 保留的关键字 173
6.1.3 定界标识符 173
6.1.4 命名约定 175
6.1.5 数据类型 176
6.1.6 混乱的NULL 182
6.2 内部存储细节 185
6.2.1 数据页 186
6.2.2 查看数据页 188
6.2.3 数据行结构 191
6.2.5 定长和变长行的存储方法 193
6.2.4 列偏移表 193
6.2.6 页联接 197
6.2.7 文本和图像数据 198
6.3 索引 199
6.3.1 群集索引 200
6.3.2 非群集索引 200
6.3.3 索引页的结构 201
6.3.4 创建索引 201
6.4 用户定义的数据类型 203
6.5 Identity属性 204
6.6 约束 207
6.6.1 PRIMARY KEY和UNIQUE约束 207
6.6.2 FOREIGN KEY约束 213
6.6.3 约束检查方法 220
6.6.4 关于删除表的限制 221
6.6.5 自引用表 221
6.6.6 参照动作 223
6.6.7 CHECK约束 224
6.6.8 默认约束 228
6.6.9 关于约束的进一步说明 232
6.7 修改表 239
6.7.1 修改数据类型 239
6.7.2 添加新列 240
6.7.3 添加、删除、禁用或启用约束 240
6.7.4 删除列 241
6.7.5 启动或禁用触发器 241
6.8.2 全局临时表(##) 242
6.8.1 私有临时表(#) 242
6.8 临时表 242
6.8.3 直接使用tempdb 243
6.8.4 对临时表的约束 243
6.8 小结 244
第七章 查询数据 245
7.1 SELECT语句 245
7.2 联结 248
7.2.1 外联结 252
7.2.2 废弃OUTER JOIN运算符*= 257
7.2.3 交叉联结 263
7.3 处理NULL 264
7.3.1 现实中的NULL 268
7.3.2 IS NULL和=NULL 270
7.4 子查询 273
7.4.1 相关子查询 278
7.5 视图和导出表 285
7.5.1 修改视图 288
7.6 其他搜索表达式 289
7.6.1 LIKE 289
7.6.2 BETWEEN 294
7.6.3 集合函数 295
7.6.4 利用集合函数的计算结果,从不同角度查看数据 301
7.6.5 TOP 315
7.6.6 UNION 317
7.7 小结 323
8.1 基本的修改操作 325
8.1.1 INSERT 325
第八章 修改数据 325
8.1.2 UPDATE 338
8.1.3 DELETE 340
8.1.4 通过视图修改数据 342
8.2 内部数据修改 350
8.2.1 插入行 351
8.2.2 拆分页 351
8.2.3 删除行 355
8.2.4 更新行 360
8.2.5 表级与索引级数据修改的比较 365
8.2.6 记录 367
8.2.7 加锁 367
8.3 小结 367
9.1 作为编程语言的Transact-SQL 369
第九章 利用Transact-SQL编程 369
9.1.1 在多层上进行程序设计 370
9.2 Transact-SQL编程结构——基础知识 372
9.2.1 变量 373
9.2.2 流控制工具 375
9.2.3 CASE 376
9.2.4 PRINT 380
9.2.5 RAISERROR 381
9.2.6 FORMATMESSAGE 384
9.2.7 运算符 384
9.2.8 标量函数 390
9.3 小结 420
10.1 批处理 421
第十章 批处理、事务、存储过程和触发器 421
10.2 事务 425
10.2.1 明确的事务和隐含的事务 426
10.2.2 在事务中查错 427
10.2.3 事务隔离等级 432
10.2.4 事务的附加特性 443
10.3 存储过程 444
10.3.1 嵌套的存储过程 446
10.3.2 存储过程中的递归技术 446
10.3.3 嵌套的事务块 451
10.3.4 保存点 454
10.3.5 存储过程的参数 455
10.4.1 第一步:分析命令并创建顺序树 456
10.4.2 第二步:编译批处理 456
10.4 批处理的执行或存储过程的存储 456
10.4.3 第三步:执行 457
10.4.4 第四步:重新编译执行计划 458
10.4.5 存储过程的存储 460
10.4.6 将存储过程加密 460
10.4.7 修改存储过程 463
10.4.8 临时的存储过程 463
10.4.9 系统存储过程和专用的SP_前缀 465
10.4.10 自动启动存储过程 466
10.4.11 系统存储过程 467
10.4.12 类目存储过程 469
10.4.13 SQL Server Agent存储过程 470
10.4.14 复制存储过程 471
10.4.15 扩展存储过程 472
10.5 触发器 479
10.5.1 重新执行一个触发器 481
10.6 调试存储过程和触发器 483
10.6.1 Execute( any string ) 485
10.7 操作文本和图像数据 486
10.7.1 WRITETEXT 487
10.7.2 READTEXT 490
10.7.3 UPDATETEXT 493
10.8 环境方面的注意事项 498
10.8.1 区分大小写 498
10.8.2 可空性和ANSI一致性设置 499
10.8.3 针对本地的SET选项 503
10.9 小结 504
第十一章 游标 505
11.1 游标的基本知识 506
11.2 游标和ISAM 508
11.2.1 ISAM风格应用程序的问题 511
11.3 游标模型 512
11.3.1 Transact-SQL游标 512
11.3.2 API服务器游标 512
11.3.3 客户游标 513
11.3.4 默认的结果集 514
11.3.5 API服务器游标和Transact-SQL游标 515
11.4 适度使用游标 516
11.4.1 逐行操作 516
11.4.2 查询操作 517
11.4.3 滚动应用程序 518
11.4.4 选择游标 519
11.4.5 游标成员、滚动和对修改的敏感度 520
11.5 使用Transact-SQL游标 525
11.5.1 DECLARE 525
11.5.2 OPEN 527
11.5.3 FETCH 528
11.5.4 UPDATE 530
11.5.5 DELETE 530
11.5.6 CLOSE 530
11.5.7 DEALLOCATE 531
11.5.8 最简单的游标语法 531
11.5.9 完全可滚动的Transact-SQL游标 532
11.5.10 利用Transact-SQL游标控制并发性 534
11.6 游标变量 542
11.6.1 获取游标信息 543
11.7 小结 548
第十二章 Transact-SQL示例和编程之迷 551
12.1 用触发器实现参照动作 551
12.1.1 递归触发器 558
12.2 编程之迷 559
12.2.1 生成测试数据 559
12.2.2 获取排队顺序 563
12.2.3 查找不同时间段间的差异 574
12.2.4 累计求和问题 579
12.2.5 每隔n行的采样问题 580
12.2.6 查找含匹配列的行 580
12.2.7 将数据放到Web页上 584
12.2.8 扩充层次结构 585
12.2.9 用选择代替迭代 591
12.2.10 获取表中的行数 592
12.2.11 保存计算的列 593
12.2.12 数据透视表(或称“交叉表”) 594
12.2.13 将SQL Server与电子邮件集成 597
12.2.14 将文本复制到有序的varchar型列中 603
12.2.15 实例化并执行自动化对象 606
12.2 小结 610
第十三章 加锁 611
13.1 加锁管理器 611
13.1.1 加锁管理器和隔离等级 612
13.1.2 自旋锁 612
13.1.3 死锁 613
13.2 用户数据的加锁类型 617
13.2.1 加锁模式 617
13.1.4 加锁和内存 617
13.2.2 加锁粒度 620
13.2.3 加锁的持续时间 623
13.2.4 加锁所有权 623
13.2.5 查看加锁 624
13.3 加锁的兼容性 629
13.4 绑定连接 630
13.5 行级加锁和页级加锁 632
13.5.1 加锁升级 633
13.6 加锁暗示和跟踪标志 634
13.7 小结 634
第四部分 性能与调整 637
第十四章 优化查询性能 637
14.1 开发小组 637
14.2 应用程序和数据库的设计 638
14.2.1 数据库的规范化 639
14.2.2 评估您的关键事务 640
14.2.3 使表的行长和键值尽可能紧凑 641
14.3 描述峰值时性能需求 642
14.4 交互系统的响应时间问题 643
14.5 模型化、测试标准和测试 644
14.5.1 开发过程中的方法论 646
14.6 创建有用的索引 647
14.6.1 谨慎地选择群集索引 649
14.6.2 使非群集索引获得较高的搜索性能 649
14.6.3 为关键事务剪裁索引 650
14.6.4 注意列的顺序 651
14.6.5 用于联结的索引列 652
14.7 使用存储过程和缓冲机制 653
14.6.6 根据需要创建或删除索引 653
14.7.1 特别的缓冲 654
14.7.2 自动参数化 655
14.7.3 sp_executesql过程 655
14.7.4 准备和执行方法 656
14.7.5 共享高速缓存的方案 656
14.7.6 使用存储过程及其他缓冲机制的条件 656
14.7.7 重新编译存储过程 657
14.7.8 限制高速缓存中的方案数 657
14.7.9 存储过程的其他优点 658
14.8 并发性与一致性间的权衡 660
14.9 解决阻塞问题 661
14.9.1 索引和阻塞 662
14.10.1 循环死锁的示例 664
14.10 解决死锁问题 664
14.10.2 转换死锁的示例 665
14.10.3 防止死锁 667
14.10.4 处理死锁 667
14.10.5 自愿成为死锁的牺牲者 668
14.10.6 观察加锁活动 668
14.10.7 找出故障的原因 669
14.11 分裂OLTP和DSS应用程序 675
14.12 优化查询 675
14.12.1 查询分析 676
14.12.2 索引选择 679
14.12.3 联结选择 688
14.12.4 其他处理策略 693
14.12.5 维护统计 694
14.12.6 Index Tuning Wizard 696
14.13 监测查询性能 697
14.13.1 STATISTICS IO 698
14.13.2 STATISTICS TIME 700
14.13.3 Showplan 700
14.13.4 使用查询暗示 702
14.14 小结 708
第十五章 配置与性能监测 711
15.1 Windows NT配置设置 711
15.1.1 任务管理 711
15.1.2 资源分配 712
15.1.3 PAGEFILE.SYS的位置 712
15.1.6 网络协议 713
15.2 SQL Server的配置参数 713
15.1.5 次要的服务 713
15.1.4 文件系统选择 713
15.2.1 影响整个服务器的选项 714
15.2.2 数据库选项 723
15.2.3 缓冲管理器 724
15.2.4 SQLSERVER.EXE的启动参数 725
15.3 维护系统 726
15.4 监测系统性能 726
15.4.1 SQL Server Profiler 727
15.4.2 性能监视器 736
15.4.3 监测性能的其他考虑 744
15.5 小结 744
推荐读物 745