本篇文章是本人在用到DB2項目開始時作的一個總結,以下資料有一部分是來自網絡,一部分是出自本人之手,不管怎么樣,目的只有一個,希望給看到這篇文章的一些幫助,轉貼請將原貼轉全,萬分感謝------(0734w)月下竹音??
從word上面直接拷貝時圖片不顯示,待哪天有時間再把圖片加上

,以下圖片基于db2 -8.1
DB2基礎,入門
一.????? 安裝DB2
???????? 有三個選擇,可以企業版,也可以只安裝客戶端。
???????? 安裝完成后,打開”控制中心”可以操作整個DB2,打開”信息中心”可以查看相應的幫助文檔.,
二.????? 安裝Quest Central for DB2
???????? 這兩個軟件都不需要配置,只要不斷點下一步就可以安裝成功,安裝完成后會在桌面上生成一個 Knowledge Xpert for DB2快捷方式.這就是它的幫助文檔.
三.????? 在按制中心創建一個實例
1.首先打開DB2“控制中心”,右擊“我以編目的系統”,再選擇添加,會出現如下頁面,單擊“發現”然后選擇相應主機,會自動填入如下項,最后確定,如圖1:
如圖1
?
2.設置主機:右擊剛才新建的實例,出現如下頁面,節點名為隨意字符,不過必須為1-8個字節,我們這里假設為TEST,創建實例服務名可以不填,端口是50000(DB2默認的端口),然后確定,如下圖2:
?
圖2
3,連接相應的數據庫實例:右擊TEST,添加,選擇相應的數據庫實例,點擊發選擇你需要的數據庫,如圖3,當要操作相應數據庫時會提示輸入用戶名,密碼.
圖3
四.????? 創建數據庫
1.選擇數據庫,右擊選擇”創建”選擇”使用向導創建數據庫”(注意“建庫時務必工”區域“中選擇編碼方式為utf-8,否則當插入中文時,會有意想不到的錯誤提示,最典型的就是提示JDK版本不兼容)操作如圖4
圖4
?
2.分別填入數據名稱,用戶表,也可以直接填入數據庫名稱,點完成.如圖5
圖5
3.創建表的方式和數據庫創建類似,其中顯示表的時候可以創建過慮器.如果我想隱藏系統表,設置表名為 not like sys% 如圖6
圖6
五.????? Quest Central for DB2使用
1.?????? 簡介:Quest Central for Databases 是一種集成化、圖形化、跨平臺的數據庫管理解決方案,可以管理異構環境下的 Oracle、DB2數據庫。Quest Central for Databases 消除了企業IT人員管理多種數據庫時面臨的技術障礙,提高了IT人員工作效率,改善了數據庫性能和數據庫應用的可用性
2.????? 使用SQL Editor: 打開Quest Central for db2,點擊菜單欄的Tools,選擇SQL Editor圖7
圖7
?
3.使用Edit tools: Edit除了菜單欄分為兩個主要模塊,上面用于執行的SQL語句,下面用于顯示執行情況以及輸出信息,點擊左上角的執行按鈕,執行SQL, 圖8
六.????? ?數據類型說明
自己的一些總結:
?
1.DB2沒有Boolean型。
2.DB2表中的列一旦建立不能刪除列。
DROP COLUMN:DB2 不允許您刪除一個列。我可以想到您希望刪除列的三個理由:
??? 回收空間:如果您希望這樣做,可以導出您希望保存的數據,刪除那個表,用您需要的那些列重新創建表,然后裝入這個表。這是否代價高昂?當然是,但是回收空間需要這樣或者 REORG TABLE。這些本來就是代價高昂的操作。
??? 這個列不再是行的邏輯部分:例如,您意識到您的雇員可能有兩個地址,并且停止跟蹤雇員(employee)表中的地址(雇員表和雇員地址(employee_address)表之間現在有 n:m 關系)。在雇員表上創建一個不包含地址列的視圖。
??? 如果您真的要用新奇的方法,可以使用 RENAME TABLE命令給基表一個新的名稱,然后將原始表名作為該視圖的名稱。您的視圖也可以連接雇員表中的有用列和從雇員地址獲得的地址。現在我們回到了關系的正道。
??? 列變寬了。如果它是 VARCHAR,那您運氣不錯。DB2 允許您將 VARCHAR 列最多加寬至表空間(tablespace)中定義的頁大小寬度(缺省的 4K 頁大小為 4,005,而在 32K 頁上最多為 32,672):
?
3.除了VARCHAR能增加長度外,其它類型不能修改列屬性,也就是上面的第三點
?? 如:TT為表名,第二個為列名ALTER TABLE TT ALTER COLUMNTT SET DATA TYPE VARCHAR(40);
4.不能更換列名:如
ALTER TABLE tt RENAME COLUMN tt TO t3;
?
數據類型存放在:sysibm.SYSDATATYPES表中
數據類型?????? 類型?????????? 特性?????????????????? 示例或范圍?
?
數值型
SMALLINT?????? 數字?????????? 長度為?2?字節精度為?5?位???? ?范圍為-32768?至?32767?
?
INTEGER??????? 數字?????????? 長度為?4?字節精度為?10?位??? ?范圍為-2147483648?至?2147483647?
?
BIGINT???????? 數字?????????? 長度為八個字節的整數,精度為 19 位范圍為
?????????????? ?????????????????????????-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
REAL?????????? 數字?????????? 單精度浮點32?位近似值???????? 范圍為否?????????????????????????????????????????????????? -3.402E+38至-1.175E-37?? 或?1.175E-37?至-3.402E+38或零?
DOUBLE???????? 數字?????????? 雙精度浮點64?位近似值???????? 范圍為-1.79769E+308?至-2.225E-307或?2.225E-307?至?1.79769E+308或零?
DECIMAL(5,2)?? 數字?????????? 精度為?5,小數位為?2???????????? 范圍????????????? 為???? ?-10**31+1?至?10**31-1?,小數位是指數字的小數部分的位數,不能大于精度。最大精度是 31 位。
?
字符串
CHAR(15)?????? 定長字符串???? ?最大長度為?254??????? 'Sunny?day?'?
VARCHAR(15)??? 變長字符?????? 最大長度為?4000??????? 'Sunny?day'?
LONG VARCHAR?? 變長字符串????? 最長可達 32,700 字節
?
CLOB字符大對象 變長字符串????? 最長可達2,147,483,647 字節(容量最大2G)
?
BLOB?????????? 變長字符串????? 最長可達 2,147,483,647 字節(容量最大2G)
?
日期時間型
DATE?????????? 日期時間?????? 三部分值?????????????? 1991-10-27????
TIME?????????? 日期時間?????? 三部分值?????????????? 13.30.05????
TIMESTAMP????? 日期時間?????? 七部分值?? 1991-10-27-13:30“05.000000?
?
?
數值型數據類型說明:
DB2內置數據類型可以分成
數值型(numeric)、
字符串型(character string)、
圖形字符串(graphic string)、
二進制字符串型(binary string)
日期時間型(datetime)。
特殊數據類型(DATALINK ),DATALINK 值包含了對存儲在數據庫以外的文件的邏輯引用。
數值型數據類型包括 SMALLINT、INTEGER、BIGINT、DECIMAL(p,s)、REAL 和 DOUBLE。所有數值都有符號和精度。精度是指除符號以外的二進制或十進制的位數。如果數字的值大于等于零,就認為符號為正。
*小整型,SMALLINT:小整型是兩個字節的整數,精度為 5 位。小整型的范圍從 -32,768 到 32,767。
*大整型,INTEGER 或 INT:大整型是四個字節的整數,精度為 10 位。大整型的范圍從 -2,147,483,648 到 2,147,483,647。
*巨整型,BIGINT:巨整型是八個字節的整數,精度為 19 位。巨整型的范圍從 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807。
* 小數型,DECIMAL(p,s)、DEC(p,s)、NUMERIC(p,s) 或 NUM(p,s):小數型的值是一種壓縮十進制數,它有一個隱含的小數點。壓縮十進制數將以二-十進制編碼(binary-coded decimal,BCD)記數法的變體來存儲。小數點的位置取決于數字的精度(p)和小數位(s)。小數位是指數字的小數部分的位數,它不可以是負數,也 不能大于精度。最大精度是 31 位。小數型的范圍從 -10**31+1 到 10**31-1。
*單精度浮點數(Single- precision floating-point),REAL:單精度浮點數是實數的 32 位近似值。數字可以為零,或者在從 -3.402E+38 到 -1.175E-37 或從 1.175E-37 到 3.402E+38 的范圍內。
*雙精度浮點數 (Double-precision floating-point),DOUBLE,DOUBLE PRECISION 或 FLOAT:雙精度浮點數是實數的 64 位近似值。數字可以為零,或者在從 -1.79769E+308 到 -2.225E-307 或從 2.225E-307 到 1.79769E+308 的范圍內。
字符串是字節序列。字符串包括 CHAR(n) 類型的定長字符串和 VARCHAR(n)、LONG VARCHAR 或 CLOB(n) 類型的變長字符串。字符串的長度就是序列中的字節數。
*定長字符串,CHARACTER(n)或 CHAR(n):定長字符串的長度介于 1 到 254 字節之間。如果沒有指定長度,那么就認為是 1 個字節。
*變長字符串,VARCHAR(n)、CHARACTER VARYING(n) 或 CHAR VARYING(n):VARCHAR(n) 類型的字符串是變長字符串,最長可達 32,672 字節。
*LONG VARCHAR:LONG VARCHAR 類型的字符串是變長字符串,最長可達 32,700 字節。
* 字符大對象字符串(Character Large Object String),CLOB(n[K|M|G]):CLOB 是變長字符串,最長可以達到 2,147,483,647 字節。如果只指定了 n,那么 n 的值就是最大長度。如果指定了 nK,那么最大長度就是 n*1,024(n 的最大值為 2,097,152)。如果指定了 nM,那么最大長度就是 n*1,048,576(n 的最大值為 2,048)。如果指定了 nG,那么最大長度就是 n*1,073,741,824(n 的最大值是 2)。CLOB 用于存儲基于大單字節字符集(single-byte character set,SBCS)字符的數據或基于混合(多字節字符集(MBCS)和 SBCS)字符的數據。圖形字符串是表示雙字節字符數據的字節序列。圖形字符串包括類型為 GRAPHIC(n) 的定長圖形字符串和類型為 VARGRAPHIC(n)、LONG VARGRAPHIC 和 DBCLOB(n) 的變長圖形字符串。字符串的長度就是序列中雙字節字符的數目。
*定長圖形字符串,GRAPHIC(n):定長圖形字符串的長度介于 1 到 127 個雙字節字符之間。如果沒有指定長度,就認為是 1 個雙字節字符。
*變長圖形字符串,VARGRAPHIC(n):VARGRAPHIC(n) 類型的字符串是變長圖形字符串,最大長度可達 16,336 個雙字節字符。
*LONG VARGRAPHIC:LONG VARGRAPHIC 類型的字符串是變長圖形字符串,最大長度可達 16,350 個雙字節字符。
* 雙字節字符大對象字符串,DBCLOB(n[K|M|G]):雙字節字符大對象是變長雙字節字符圖形字符串,最長可達 1,073,741,823 個字符。如果只指定了 n,那么 n 就是最大長度。如果指定了 nK,那么最大長度就是 n*1,024(n 的最大值為 1,048,576)。如果指定了 nM,那么最大長度就是 n*1,048,576(n 的最大值為 1,024)。如果指定了 nG,那么最大長度就是 n*1,073,741,824(n 的最大值是 1)。DBCLOB 用于存儲基于大 DBCS(雙字節字符集,double-byte character set)字符的數據。二進制字符串是字節序列。二進制字符串包括 BLOB(n) 類型的變長字符串,它用于容納非傳統型的數據,諸如圖片、語音或混合媒體等,還可以容納用戶定義的類型及用戶定義的函數的結構化數據。
* 二進制大對象,BLOB(n[K|M|G]):二進制大對象是變長字符串,最長可達 2,147,483,647 字節。如果只指定了 n,那么 n 就是最大長度。如果指定了 nK,那么最大長度就是 n*1,024(n 的最大值為 2,097,152)。如果指定了 nM,那么最大長度就是 n*1,048,576(n 的最大值為 2,048)。如果指定了 nG,那么最大長度就是 n*1,073,741,824(n 的最大值是 2,也就是容量為2G)。
日期時間型數據類型包括 DATE、TIME 和 TIMESTAMP。日期時間值可在某些算術和字符串操作中使用,而且兼容某些字符串,但它們既不是字符串,也不是數字。
*DATE:DATE 是一個由三部分組成的值(年、月和日)。年份部分的范圍是從 0001 到 9999。月份部分的范圍是從 1 到 12。日部分的范圍是從 1 到 n,其中 n 的值取決于月份。DATE 列長 10 個字節。
*TIME:TIME 是一個由三部分組成的值(小時、分鐘和秒)。小時部分的范圍是從 0 到 24。分鐘和秒部分的范圍都是從 0 到 59。如果小時為 24,分鐘和秒的值都是 0。TIME 列長 8 個字節。
*TIMESTAMP: TIMESTAMP 是一個由七部分組成的值(年、月、日、小時、分鐘、秒和微秒)。年份部分的范圍是從 0001 到 9999。月份部分的范圍是從 1 到 12。日部分的范圍是從 1 到 n,其中 n 的值取決于月份。小時部分的范圍是從 0 到 24。分鐘和秒部分的范圍都是從 0 到 59。微秒部分的范圍是從 000000 到 999999。如果小時是 24,那么分鐘值、秒的值和微秒的值都是 0。TIMESTAMP 列長 26 個字節。日期時間值的字符串表示:盡管 DATE、TIME 和 TIMESTAMP 的值的內部表示對用戶是透明的,日期、時間和時間戳記也可以用字符串來表示,CHAR 標量函數(請參閱 SQL 的“詞類(parts of speech)”)可以用于創建日期時間值的字符串表示。
*日期值的字符串表示是一個以數字開始,長度不少于 8 個字符的字符串。日期值的月份和日部分中前面的零可以省略。
*時間值的字符串表示是以數字開頭,長度不少于 4 個字符的字符串。時間值的小時部分前面的零可以省略,秒部分可以完全省略。如果秒的值沒有指定,那么就認為是 0。
* 時間戳記值的字符串表示是以數字開頭,長度不少于 16 個字符的字符串。完整的時間戳記字符串表示形式為 yyyy-mm-dd-hh.mm.ss.nnnnnn。時間戳記值的月、日或小時等幾部分前面的零可以省略,微秒可以截斷或完全省略。如果任何時間戳記值的微秒部分尾零被省略掉了,那么將假定空缺的數位上是零。
?
圖8
七.????? 附1:常用的DB2命令
DB2有自帶的命令中心,但是命令中心沒有關鍵字顏色提示,建議使用Quest Central for db2
常用命令列表:
1.?建立數據庫DB2_GCB?
CREATE?DATABASE?DB2_GCB?ON?G:?ALIAS?DB2_GCB?
USING?CODESET?GBK?TERRITORY?CN?COLLATE?USING?SYSTEM?DFT_EXTENT_SZ?32?
2.?連接數據庫?
connect?to?sample1?user?db2admin?using?8301206?
3.?建立別名?
create?alias?db2admin.tables?for?sysstat.tables;?
CREATE?ALIAS?DB2ADMIN.VIEWS?FOR?SYSCAT.VIEWS?
create?alias?db2admin.columns?for?syscat.columns;?
create?alias?guest.columns?for?syscat.columns;?
4.?建立表?
create?table?zjt_tables?as?
(select?*?from?tables)?definition?only;?
create?table?zjt_views?as?
(select?*?from?views)?definition?only;?
5.?插入記錄?
insert?into?zjt_tables?select?*?from?tables;?
insert?into?zjt_views?select?*?from?views;?
6.?建立視圖?
create?view?V_zjt_tables?as?select?tabschema,tabname?from?zjt_tables;?
????7.?建立觸發器?
CREATE?TRIGGER?zjt_tables_del?
AFTER?DELETE?ON?zjt_tables?
REFERENCING?OLD?AS?O?
FOR?EACH?ROW?MODE?DB2SQL?
Insert?into?zjt_tables1?values(substr(o.tabschema,1,8),substr(o.tabname,1,10))?
8.?建立唯一性索引?
CREATE?UNIQUE?INDEX?I_ztables_tabname?
ON?zjt_tables(tabname);?
9.?查看表?
select?tabname?from?tables?
where?tabname='ZJT_TABLES';?
10.?查看列?
select?SUBSTR(COLNAME,1,20)?as?列名,TYPENAME?as?類型,LENGTH?as?長度?
from?columns?
where?tabname='ZJT_TABLES';?
11.?查看表結構?
db2?describe?table?user1.department?
db2?describe?select?*?from?user.tables?
12.?查看表的索引?
db2?describe?indexes?for?table?user1.department?
13.?查看視圖?
select?viewname?from?views?
where?viewname='V_ZJT_TABLES';?
14.?查看索引?
select?indname?from?indexes?
where?indname='I_ZTABLES_TABNAME';?
15.?查看存貯過程?
SELECT?SUBSTR(PROCSCHEMA,1,15),SUBSTR(PROCNAME,1,15)?
FROM?SYSCAT.PROCEDURES;?
?
17.?重新連接?
connect?reset?
18.?中斷數據庫連接?
disconnect?db2_gcb?
19.?view?application?
LIST?APPLICATION;?
20.?kill?application?
FORCE?APPLICATION(0);?
db2?force?applications?all?(強迫所有應用程序從數據庫斷開)?
21.?lock?table
lock?table?test?in?exclusive?mode?
22.?共享?
lock?table?test?in?share?mode?
23.?顯示當前用戶所有表?
list?tables?
24.?列出所有的系統表?
list?tables?for?system?
25.?顯示當前活動數據庫?
list?active?databases?
26.?查看命令選項?
list?command?options?
27.?系統數據庫目錄?
LIST?DATABASE?DIRECTORY?
28.?表空間?
list?tablespaces?
29.?表空間容器?
LIST?TABLESPACE?CONTAINERS?FOR?
Example:?LIST?TABLESPACE?CONTAINERS?FOR?1?
30.?顯示用戶數據庫的存取權限?
GET?AUTHORIZATIONS?
31.?啟動實例?
DB2START?
32.?停止實例?
db2stop?
33.?表或視圖特權?
grant?select,delete,insert,update?on?tables?to?user?
grant?all?on?tables?to?user?WITH?GRANT?OPTION?
34.?程序包特權?
GRANT?EXECUTE?
ON?PACKAGE?PACKAGE-name?
TO?PUBLIC?
35.?模式特權?
GRANT?CREATEIN?ON?SCHEMA?SCHEMA-name?TO?USER?
36.?數據庫特權?
grant?connect,createtab,dbadm?on?database?to?user?
37.?索引特權?
grant?control?on?index?index-name?to?user?
38.?信息幫助?(??XXXnnnnn?)?
例:??SQL30081?
39.?SQL?幫助(說明?SQL?語句的語法)?
help?statement?
例如,help?SELECT?
40.?SQLSTATE?幫助(說明?SQL?的狀態和類別代碼)?
??sqlstate?或???class-code?
41.?更改與"管理服務器"相關的口令?
db2admin?setid?username?password?
42.?創建?SAMPLE?數據庫?
db2sampl?
db2sampl?F:(指定安裝盤)?
43.?使用操作系統命令?
!?dir?
44.?轉換數據類型?(cast)?
SELECT?EMPNO,?CAST(RESUME?AS?VARCHAR(370))?
FROM?EMP_RESUME?
WHERE?RESUME_FORMAT?=?'ascii'?
45.?UDF
要運行?DB2?Java?存儲過程或?UDF,還需要更新服務器上的?DB2?數據庫管理程序配置,以包括在該機器上安裝?JDK?的路徑?
db2?update?dbm?cfg?using?JDK11_PATH?d:\sqllib\java\jdk?
TERMINATE?
update?dbm?cfg?using?SPM_NAME?sample?
46.?檢查?DB2?數據庫管理程序配置?
db2?get?dbm?cfg?
47.?檢索具有特權的所有授權名?
SELECT?DISTINCT?GRANTEE,?GRANTEETYPE,?'DATABASE'?FROM?SYSCAT.DBAUTH?
UNION?
SELECT?DISTINCT?GRANTEE,?GRANTEETYPE,?'TABLE?'?FROM?SYSCAT.TABAUTH?
UNION?
SELECT?DISTINCT?GRANTEE,?GRANTEETYPE,?'PACKAGE?'?FROM?SYSCAT.PACKAGEAUTH?
UNION?
SELECT?DISTINCT?GRANTEE,?GRANTEETYPE,?'INDEX?'?FROM?SYSCAT.INDEXAUTH?
UNION?
SELECT?DISTINCT?GRANTEE,?GRANTEETYPE,?'COLUMN?'?FROM?SYSCAT.COLAUTH?
UNION?
SELECT?DISTINCT?GRANTEE,?GRANTEETYPE,?'SCHEMA?'?FROM?SYSCAT.SCHEMAAUTH?
UNION?
SELECT?DISTINCT?GRANTEE,?GRANTEETYPE,?'SERVER?'?FROM?SYSCAT.PASSTHRUAUTH?
ORDER?BY?GRANTEE,?GRANTEETYPE,?3?
create?table?yhdab?
(id?varchar(10),?
password?varchar(10),?
ywlx?varchar(10),?
kh?varchar(10));?
create?table?ywlbb?
(ywlbbh?varchar(8),?
ywmc?varchar(60))?
48.?修改表結構?
alter?table?yhdab?ALTER?kh?SET?DATA?TYPE?varchar(13);?
alter?table?yhdab?ALTER?ID?SET?DATA?TYPE?varchar(13);?
alter?table?lst_bsi?alter?bsi_money?set?data?type?int;?
insert?into?yhdab?values?
('20000300001','123456','user01','20000300001'),?
('20000300002','123456','user02','20000300002');?
49.增加licence
? db2licm -a path(如d:\DB2\db2udbee.lic)
?
八.????? 附2:列函數
列函數對列中的一組值進行運算以得到單個結果值。下列就是一些列函數的示例。?
AVG?
返回某一組中的值除以該組中值的個數的和?
COUNT?
返回一組行或值中行或值的個數?
MAX?
返回一組值中的最大值?
MIN?
返回一組值中的最小值?
九.????? 附3:標量函數
標量函數對值進行某個運算以返回另一個值。下列就是一些由DB2?通用數據庫提供的標量函數的示例。?
ABS?
返回數的絕對值?
HEX?
返回值的十六進制表示?
LENGTH?
返回自變量中的字節數(對于圖形字符串則返回雙字節字符數。)?
YEAR?
抽取日期時間值的年份部分?
二進制大對象?(BLOB)?字符串。?
字符大對象?(CLOB)?字符串,它的字符序列可以是單字節字符或多字節字符,或這兩者的組合。?
雙字節字符大對象?(DBCLOB)?字符串,它的字符序列是雙字節字符。?
數據庫范式
第一種規范形式:表中的每一行和每一列均有一個值,永遠不會是一組值。?
第二種規范形式:不在關鍵字中的每一列提供取決于整個關鍵字的事實。?
第三種規范形式:每個非關鍵字列提供與其他非關鍵字列無關并只取決于該關鍵字的事實。?
第四種規范形式:沒有行包含有關一個實體的兩個或更多個獨立的多值事實。?
十.????? DB2重裝
1.打開控制面板選擇添加刪除程序中,卸掉DB2應該程序。
2.DB2在安裝后會在安裝目錄相應的盤下生成一個DB2的文件夾,如:C:\DB2\NODE0000(安裝在D盤就為:D:\DB2\NODE0000),卸載后應用程序后,再刪除NODE0000文件就可以了,不如不刪NODE0000,重裝時會報錯,而且重裝后DB2跑不起來
?
?