译者序
序言
前言
第一部分 数据库基本概念
第1章 DB2数据库结构 1
1.1 关系数据库 1
1.2 关系数据库的对象 1
1.2.1 数据库 2
1.2.2 表空间 3
1.2.3 表 3
1.2.4 索引 6
1.2.5 视图 7
1.2.6 程序包 8
1.2.7 触发器 8
1.2.8 别名 9
1.2.9 事件监视器 9
1.2.10 模式 9
1.2.11 系统目录视图 10
1.2.12 恢复日志文件和恢复历史文件 10
1.2.13 配置文件 11
1.3 DB2数据库目录 11
1.3.1 物理数据库目录 12
1.3.2 卷目录 12
1.3.3 系统目录 13
1.3.4 工作站目录 13
1.3.5 数据库连接服务目录 13
1.4 小结 14
第2章 数据库一致性机制 15
2.1 什么是数据一致性 15
2.2 事务 15
2.3 并发性和事务隔离级别 17
2.3.1 可重复读 18
2.3.2 读稳定性 18
2.3.3 游标稳定性 18
2.3.4 未提交读 19
2.3.5 指定隔离级别 19
2.4 锁定 19
2.4.1 锁定属性 20
2.4.2 锁定状态 20
2.4.3 锁定和应用程序性能 22
2.4.4 事务日志 28
2.4.5 数据库恢复 29
2.5 小结 30
第二部分 应用程序开发基础
第3章 DB2应用程序开发入门 33
3.1 什么是DB2数据库应用程序 33
3.2 设计一个DB2数据库应用程序 34
3.3 DB2数据库应用程序的元素 35
3.3.1 高级编程语言 35
3.3.2 SQL语句 36
3.3.3 CLI函数调用 38
3.3.4 API函数调用 39
3.4 建立DB2数据库应用程序开发环境 40
3.5 建立DB2数据库应用程序测试环境 41
3.5.1 创建测试数据库 41
3.5.2 创建测试表和视图 41
3.5.3 产生测试数据 42
3.6 管理事务 42
3.7 创建并准备源代码文件 43
3.8 小结 43
第4章 编写嵌入式SQL应用程序 44
4.1 关于嵌入式SQL语句的原型 44
4.2 嵌入式SQL源代码文件的主要部分 44
4.2.1 创建程序头 44
4.2.2 创建程序体 48
4.2.3 创建程序尾 49
4.3 创建使用常用错误处理程序 50
4.4 使用异常处理程序、信号程序
和中断处理程序 51
4.5 创建可执行程序和包 51
4.5.1 预编译源代码文件 52
4.5.2 编译源代码文件 53
4.5.3 链接目标程序 54
4.5.4 创建和绑定包 54
4.6 时间戳 54
4.7 运行、测试和调试嵌入式SQL应用程序 55
4.8 小结 55
第5章 在复杂的环境下的编程 57
5.1 母语支持 57
5.1.1 整理顺序 57
5.1.2 本国语言环境 58
5.1.3 代码页 59
5.2 对日语和繁体中文 EUC 代码集的支持 61
5.3 多个数据库的两阶段提交处理 61
5.4 两阶段提交的处理过程 62
5.4.1 两阶段提交期间的错误恢复 63
5.4.2 两阶段提交的限制 64
5.5 DRDA服务器的存取 65
5.6 多线程数据库的存取 65
5.6.1 编程的考虑 66
5.6.2 防止死锁的发生 67
5.7 并发事务 68
5.8 X/Open XA 接口支持 68
5.9 网络环境下的大宗数据的移动 71
5.10 节点组和数据分区 71
5.10.1 并行性的类型 72
5.10.2 启用数据分区 74
5.10.3 使用直接的DSS和本地旁路 75
5.10.4 使用缓存插入 75
5.10.5 处理分区数据库环境中的错误 78
5.11 小结 79
第6章 改进应用程序的性能 80
6.1 协调嵌入SQL查询 80
6.1.1 包含SELECT语句的查询 80
6.1.2 存取两个或更多个的表的查询 82
6.1.3 复合查询 82
6.2 索引管理 82
6.2.1 创建索引的准则 83
6.2.2 优化索引性能 85
6.3 表空间管理 87
6.4 使用预编译器的优化特征 89
6.4.1 设置优化级别 91
6.4.2 确定使用哪种优化级别 92
6.5 行分块 93
6.6 锁和应用程序性能 94
6.7 代码页的选择 96
6.8 数据分区 96
6.8.1 表并置 96
6.8.2 选择正确的分区键 97
6.9 小结 97
第三部分 SQL 语 句
第7章 应用编程语言构建语句 99
7.1 SQL预编译器指令 99
7.2 动态SQL支持 100
7.3 动态SQL和参数标志 100
7.4 高速缓存 103
7.5 DB2编程语言构建SQL语句 105
7.6 BEGIN DECLARE SECTION 106
7.7 END DECLARE SECTION 109
7.8 FREE LOCATOR 109
7.9 INCLUDE 112
7.10 WHENEVER 113
7.11 BEGIN COMPOUND 117
7.12 END COMPOUND 123
7.13 PREPARE 123
7.14 DESCRIBE 129
7.15 EXECUTE 134
7.16 EXECUTE IMMEDIATE 139
7.17 EXPLAIN 143
第8章 数据库连接和事务控制语句 148
8.1 连接管理 148
8.2 应用的状态 149
8.3 连接状态 150
8.4 影响连接管理的SQL预编译程序选项 151
8.5 事务管理 152
8.6 DB2数据库的连接及事务
控制SQL语句 153
8.7 CONNECT 153
8.8 SET CONNECTION 163
8.9 RELEASE 164
8.10 DISCONNECT 167
8.11 LOCK TABLE 168
8.12 COMMIT 171
8.13 ROLLBACK 175
第9章 数据存取和修改控制语句 180
9.1 授权和权限 180
9.2 实例级授权 180
9.2.1 系统管理授权 180
9.2.2 系统控制授权 180
9.2.3 系统维护授权 180
9.3 数据库级授权 181
9.3.1 数据库管理授权 181
9.3.2 BINDADD授权 181
9.3.3 CONNECT授权 181
9.3.4 CREATETAB授权 181
9.3.5 CREATE_NOT_FENCED授权 181
9.3.6 IMPLICIT_SCHEMA授权 181
9.4 权限 182
9.4.1 ALTER权限 182
9.4.2 ALTERIN权限 182
9.4.3 BIND权限 182
9.4.4 CONTROL权限 182
9.4.5 CREATEIN权限 183
9.4.6 DELETE权限 183
9.4.7 DROPIN权限 183
9.4.8 EXECUTE权限 183
9.4.9 INDEX权限 183
9.4.10 INSERT权限 183
9.4.11 PASSTHRU权限 183
9.4.12 REFERENCES权限 183
9.4.13 SELECT权限 183
9.4.14 UPDATE权限 184
9.5 授予和撤消授权和权限 184
9.6 DB2数据存取和修改控制的SQL语句 184
9.7 GRANT:数据库授权 185
9.8 GRANT:表、视图和别名权限 190
9.9 GRANT:索引权限 197
9.10 GRANT:包权限 201
9.11 GRANT:模式权限 206
9.12 REVOKE:数据库授权 211
9.13 REVOKE:表、视图和别名权限 213
9.14 REVOKE:索引权限 216
9.15 REVOKE:包权限 216
9.16 REVOKE:模式权限 218
第10章 数据定义语言语句 220
10.1 概述 220
10.1.1 创建缓冲池 220
10.1.2 创建节点组 221
10.1.3 创建表空间 221
10.1.4 创建表 221
10.1.5 创建视图 222
10.1.6 创建索引 225
10.1.7 创建模式 226
10.1.8 创建别名 226
10.1.9 给一个数据库对象添加注解 227
10.1.10 删除一个对象 227
10.2 DB2 的DDL语句 227
10.3 CREATE BUFFERPOOL 228
10.4 CREATE NODEGROUP 234
10.5 CREATE TABLESPACE 238
10.6 CREATE TABLE(Normal) 248
10.7 CREATE TABLE(Typed) 268
10.8 CREATE TABLE(Summary) 284
10.9 CREATE VIEW(Normal) 294
10.10 CREATE VIEW(Typed) 302
10.11 CREATE INDEX 312
10.12 CREATE SCHEMA 319
10.13 CREATE ALIAS 324
10.14 COMMENT ON 329
10.15 DROP 337
第11章 修改数据对象的定义 346
11.1 修改节点组 346
11.2 修改表空间 346
11.3 修改表的结构 346
11.4 重命名表 347
11.5 控制完整性检查 347
11.6 修改DB2 数据定义的SQL语句 348
11.7 ALTER BUFFERPOOL 348
11.8 ALTER NODEGROUP 354
11.9 ALTER TABLESPACE 359
11.10 ALTER TABLE 367
11.11 ALTER VIEW 386
11.12 RENAME TABLE 395
11.13 REFRESH TABLE 400
11.14 SET INTEGRITY 405
第12章 数据操纵语言语句 419
12.1 查询 419
12.2 SELECT语句和它的子句 419
12.2.1 From 子句 420
12.2.2 WHERE子句 420
12.2.3 GROUP BY 子句 423
12.2.4 HAVING 子句 424
12.2.5 UNION子句 424
12.2.6 ORDER BY子句 425
12.3 什么是子查询 425
12.4 使用一个游标检索多行记录 425
12.5 INSERT 语句 427
12.6 UPDATE语句 428
12.7 DELETE语句 428
12.8 DB2数据操纵语言SQL语句 428
12.9 SELECT INTO 429
12.10 VALUES INTO 432
12.11 DECLARE CURSOR 435
12.12 OPEN 442
12.13 FETCH 444
12.14 CLOSE 447
12.15 INSERT 448
12.16 UPDATE 454
12.17 DELETE 463
第13章 用户自定义数据类型、用户自定义
函数和存储过程 470
13.1 用户自定义数据类型 470
13.1.1 用户自定义单值数据类型 471
13.1.2 用户自定义结构数据类型 472
13.2 为什么使用用户自定义数据类型 472
13.3 用户自定义函数 473
13.3.1 有源函数 473
13.3.2 外部标量函数 474
13.3.3 外部表函数 474
13.3.4 外部OLE DB函数 475
13.3.5 创建函数映射 476
13.3.6 创建函数模板 476
13.4 为什么使用用户自定义函数 477
13.5 存储过程 477
13.5.1 编写存储过程 478
13.5.2 编写存储过程的规则 479
13.6 DB2用户自定义数据类型、用户自定义
函数和存储过程的SQL定义语句 480
13.7 CREATE DISTINCT TYPE 481
13.8 CREATE TYPE(Structured) 488
13.9 ALTER TYPE(Structured) 499
13.10 CREATE FUNCTION
(Source or Template) 505
13.11 CREATE FUNCTION
(External Scalar) 514
13.12 CREATE FUNCTION
(External Table) 537
13.13 CREATE FUNCTION
(OLE DB Exteranl Table) 558
13.14 CREATE PROCEDURE 568
13.15 CALL 587
第14章 触发器 594
14.1 触发器的用途和定义 594
14.1.1 在被触发事件中使用函数 597
14.1.2 多触发器的顺序 597
14.2 使用转换变量 598
14.3 触发器中的错误处理 598
14.4 触发器的级联 599
14.5 递归触发器 599
14.6 约束和触发器之间的比较 590
14.7 约束和触发器之间的配合 600
14.8 定义DB2触发器的SQL语句 600
14.9 CREATE TRIGGER 601
14.10 SET(Transition Variation) 610
14.11 SIGNAL SQLSTATE 612
第15章 数据库事件监控器 616
15.1 事件监控器 616
15.2 创建事件监控器 616
15.2.1 事件记数 617
15.2.2 事件监控器的输出 617
15.2.3 事件监控器的数据流格式 618
15.3 DB2控制数据库事件监控器
的SQL语句 618
15.4 CREATE EVENT MONITOR 619
15.5 SET EVENT MONITPR STATE 627
15.6 FLUSH EVENT MONITOR 631
第16章 设置DB2的专用寄存器 636
16.1 DB2专用寄存器 636
16.1.1 CURRENT DATE专用寄存器
(数据类型:DATE) 636
16.1.2 CURRENT DEGREE专用寄存器
(数据类型:CHAR(5)) 637
16.1.3 CURRENT EXPLAIN MODE专用寄存
器(数据类型:VARCHAR(254)) 637
16.1.4 CURRENT EXPLAIN SNAPSHOT专
用寄存器(数据类型:CHAR(8)) 637
16.1.5 CURRENT NODE专用寄存器
(数据类型:INTERGER) 637
16.1.6 CURRENT PATH专用寄存器
(数据类型:VARCHAR(254)) 638
16.1.7 CURRENT QUERY OPTIMIZATION专
用寄存器(数据类型:INTEGER) 638
16.1.8 CURRENT REFRESH AGE专用寄存器
(数据类型:DECIMAL(20,6)) 638
16.1.9 CURRENT SCHEMA专用寄存器
(数据类型:VARCHAR(128)) 638
16.1.10 CURRENT SERVER专用寄存器
(数据类型:VARCHAR(18)) 639
16.1.11 CURRENT TIME专用寄存器
(数据类型:TIME) 639
16.1.12 CURRENT TIMESTAMP专用寄存器
(数据类型:timestamp) 639
16.1.13 CURRENT TIMEZONE专用寄存器
(数据类型:DECIMAL(6,0)) 639
16.1.14 USER专用寄存器(数据类型:VARCHAR(128)) 639
16.2 修改DB2专用寄存器的SQL语句 639
16.3 SET PATH 640
16.4 SET SCHEMA 644
16.5 SET CURRENT DEGREE 647
16.6 SET CURRENT QUERY
OPTIMIZATION 650
16.7 SET CURRENT PACKAGESET 656
16.8 SET CURRENT EXPLAIN MODE 660
16.9 SET CURRENT EXPLAIN
SNAPSHOT 664
16.10 SET CURRENT REFRESH AGE 668
第四部分 附 录
附录A SQL数据结构 673
附录B SQL函数 683
附录C 联合体系统 696
附录D DB2数据库链接管理器 703
附录E 开发JDBC应用程序和applet 709
附录F 程序示例是怎样开发的 725