譯者序
序言
前言
第一部分 數據庫基本概念
第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 觸發(fā)器 8
1.2.8 別名 9
1.2.9 事件監(jiān)視器 9
1.2.10 模式 9
1.2.11 系統(tǒng)目錄視圖 10
1.2.12 恢復日志文件和恢復歷史文件 10
1.2.13 配置文件 11
1.3 DB2數據庫目錄 11
1.3.1 物理數據庫目錄 12
1.3.2 卷目錄 12
1.3.3 系統(tǒng)目錄 13
1.3.4 工作站目錄 13
1.3.5 數據庫連接服務目錄 13
1.4 小結 14
第2章 數據庫一致性機制 15
2.1 什么是數據一致性 15
2.2 事務 15
2.3 并發(fā)性和事務隔離級別 17
2.3.1 可重復讀 18
2.3.2 讀穩(wěn)定性 18
2.3.3 游標穩(wěn)定性 18
2.3.4 未提交讀 19
2.3.5 指定隔離級別 19
2.4 鎖定 19
2.4.1 鎖定屬性 20
2.4.2 鎖定狀態(tài) 20
2.4.3 鎖定和應用程序性能 22
2.4.4 事務日志 28
2.4.5 數據庫恢復 29
2.5 小結 30
第二部分 應用程序開發(fā)基礎
第3章 DB2應用程序開發(fā)入門 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數據庫應用程序開發(fā)環(huán)境 40
3.5 建立DB2數據庫應用程序測試環(huán)境 41
3.5.1 創(chuàng)建測試數據庫 41
3.5.2 創(chuàng)建測試表和視圖 41
3.5.3 產生測試數據 42
3.6 管理事務 42
3.7 創(chuàng)建并準備源代碼文件 43
3.8 小結 43
第4章 編寫嵌入式SQL應用程序 44
4.1 關于嵌入式SQL語句的原型 44
4.2 嵌入式SQL源代碼文件的主要部分 44
4.2.1 創(chuàng)建程序頭 44
4.2.2 創(chuàng)建程序體 48
4.2.3 創(chuàng)建程序尾 49
4.3 創(chuàng)建使用常用錯誤處理程序 50
4.4 使用異常處理程序、信號程序
和中斷處理程序 51
4.5 創(chuàng)建可執(zhí)行程序和包 51
4.5.1 預編譯源代碼文件 52
4.5.2 編譯源代碼文件 53
4.5.3 鏈接目標程序 54
4.5.4 創(chuàng)建和綁定包 54
4.6 時間戳 54
4.7 運行、測試和調試嵌入式SQL應用程序 55
4.8 小結 55
第5章 在復雜的環(huán)境下的編程 57
5.1 母語支持 57
5.1.1 整理順序 57
5.1.2 本國語言環(huán)境 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 防止死鎖的發(fā)生 67
5.7 并發(fā)事務 68
5.8 X/Open XA 接口支持 68
5.9 網絡環(huán)境下的大宗數據的移動 71
5.10 節(jié)點組和數據分區(qū) 71
5.10.1 并行性的類型 72
5.10.2 啟用數據分區(qū) 74
5.10.3 使用直接的DSS和本地旁路 75
5.10.4 使用緩存插入 75
5.10.5 處理分區(qū)數據庫環(huán)境中的錯誤 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 創(chuàng)建索引的準則 83
6.2.2 優(yōu)化索引性能 85
6.3 表空間管理 87
6.4 使用預編譯器的優(yōu)化特征 89
6.4.1 設置優(yōu)化級別 91
6.4.2 確定使用哪種優(yōu)化級別 92
6.5 行分塊 93
6.6 鎖和應用程序性能 94
6.7 代碼頁的選擇 96
6.8 數據分區(qū) 96
6.8.1 表并置 96
6.8.2 選擇正確的分區(qū)鍵 97
6.9 小結 97
第三部分 SQL 語 句
第7章 應用編程語言構建語句 99
7.1 SQL預編譯器指令 99
7.2 動態(tài)SQL支持 100
7.3 動態(tài)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 應用的狀態(tài) 149
8.3 連接狀態(tài) 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 系統(tǒng)管理授權 180
9.2.2 系統(tǒng)控制授權 180
9.2.3 系統(tǒng)維護授權 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 創(chuàng)建緩沖池 220
10.1.2 創(chuàng)建節(jié)點組 221
10.1.3 創(chuàng)建表空間 221
10.1.4 創(chuàng)建表 221
10.1.5 創(chuàng)建視圖 222
10.1.6 創(chuàng)建索引 225
10.1.7 創(chuàng)建模式 226
10.1.8 創(chuàng)建別名 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 修改節(jié)點組 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 創(chuàng)建函數映射 476
13.3.6 創(chuàng)建函數模板 476
13.4 為什么使用用戶自定義函數 477
13.5 存儲過程 477
13.5.1 編寫存儲過程 478
13.5.2 編寫存儲過程的規(guī)則 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章 觸發(fā)器 594
14.1 觸發(fā)器的用途和定義 594
14.1.1 在被觸發(fā)事件中使用函數 597
14.1.2 多觸發(fā)器的順序 597
14.2 使用轉換變量 598
14.3 觸發(fā)器中的錯誤處理 598
14.4 觸發(fā)器的級聯 599
14.5 遞歸觸發(fā)器 599
14.6 約束和觸發(fā)器之間的比較 590
14.7 約束和觸發(fā)器之間的配合 600
14.8 定義DB2觸發(fā)器的SQL語句 600
14.9 CREATE TRIGGER 601
14.10 SET(Transition Variation) 610
14.11 SIGNAL SQLSTATE 612
第15章 數據庫事件監(jiān)控器 616
15.1 事件監(jiān)控器 616
15.2 創(chuàng)建事件監(jiān)控器 616
15.2.1 事件記數 617
15.2.2 事件監(jiān)控器的輸出 617
15.2.3 事件監(jiān)控器的數據流格式 618
15.3 DB2控制數據庫事件監(jiān)控器
的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 聯合體系統(tǒng) 696
附錄D DB2數據庫鏈接管理器 703
附錄E 開發(fā)JDBC應用程序和applet 709
附錄F 程序示例是怎樣開發(fā)的 725