跟屌絲大哥學(xué)DB2-第四課 數(shù)據(jù)類型 ,表 ,視圖,索引,模式,約束(一)
(DiaoSiID)在我們建立表前 ,我們先要了解DB2中都有哪些數(shù)據(jù)類型,以便我們這些屌絲以后快速創(chuàng)建表。DB2 提供了一套豐富且靈活的數(shù)據(jù)類型。DB2 附帶 INTEGER、CHAR 和 DATE 等基本數(shù)據(jù)類型。它還提供了創(chuàng)建用戶定義的數(shù)據(jù)類型(UDT)的工具,使用戶能夠創(chuàng)建復(fù)雜的非傳統(tǒng)的數(shù)據(jù)類型,從而適應(yīng)當(dāng)今復(fù)雜的編程環(huán)境。在給定的情況下,選用哪種數(shù)據(jù)類型取決于列中存儲(chǔ)的信息的類型和范圍。
內(nèi)置的數(shù)據(jù)類型分為四類:數(shù)字、字符串、日期時(shí)間和 XML。
用戶定義的數(shù)據(jù)類型分為:單值類型、結(jié)構(gòu)化類型和引用類型。

如上圖所示,數(shù)字?jǐn)?shù)據(jù)類型又可分為三類。這些類型在可以存儲(chǔ)的數(shù)字?jǐn)?shù)據(jù)的范圍和精度方面有所差異。
- 整數(shù):SMALLINT、INTEGER 和 BIGINT 用來(lái)存儲(chǔ)整數(shù)。例如,庫(kù)存數(shù)量可以定義為 INTEGER。SMALLINT 可以在 2 個(gè)字節(jié)中存儲(chǔ)從
-32,768 到 32,767 的整數(shù)。INTEGER 可以在 4 個(gè)字節(jié)中存儲(chǔ)從
-2,147,483,648 到 2,147,483,647 的整數(shù)。BIGINT 可以在 8 個(gè)字節(jié)中存儲(chǔ)從
-9,223,372,036,854,775,808 到
9,223,372,036,854,775,807 的整數(shù)。
- 小數(shù):DECIMAL 用來(lái)存儲(chǔ)有小數(shù)部分的數(shù)字。要定義這個(gè)數(shù)據(jù)類型,需要指定精度 (p,表示總的位數(shù))和小數(shù)位
(s,表示小數(shù)點(diǎn)右邊的位數(shù))。定義為 DECIMAL(10,2) 的列可以保存的金額最高可為 99999999.99。數(shù)據(jù)庫(kù)中需要的存儲(chǔ)空間依賴于精度,按照公式
p/2 +1 計(jì)算。所以 DECIMAL(10,2) 需要
10/2 + 1 (即 6)字節(jié)。
- 浮點(diǎn)數(shù):REAL 和 DOUBLE 用來(lái)存儲(chǔ)數(shù)字的近似值。例如,非常小或非常大的科學(xué)計(jì)量值可以定義為 REAL。REAL 可以定義為具有 1 到 24 位之間的長(zhǎng)度,需要 4 字節(jié)的存儲(chǔ)空間。DOUBLE 可以定義為具有 25 到 53 位之間的長(zhǎng)度,需要 8 字節(jié)的存儲(chǔ)空間。FLOAT 可以視為 REAL 或 DOUBLE 的同義詞。
字符串?dāng)?shù)據(jù)類型

如上圖所示,DB2 為存儲(chǔ)字符數(shù)據(jù)或字符串提供了幾種數(shù)據(jù)類型。根據(jù)要存儲(chǔ)的字符串的大小和字符串中的數(shù)據(jù)來(lái)選擇數(shù)據(jù)類型。
下面的數(shù)據(jù)類型用來(lái)存儲(chǔ)單字節(jié)字符串:
- CHAR 或 CHARACTER 用來(lái)存儲(chǔ)最多 254 字節(jié)的固定長(zhǎng)度的字符串。例如,制造商可以給零件分配一個(gè) 8
字符長(zhǎng)度的標(biāo)識(shí)符,因此這些標(biāo)識(shí)符在數(shù)據(jù)庫(kù)中存儲(chǔ)為 CHAR(8) 類型的列。
- VARCHAR 用來(lái)存儲(chǔ)可變長(zhǎng)度的字符串。例如,制造商用不同長(zhǎng)度的標(biāo)識(shí)符表示大量零件,因此這些標(biāo)識(shí)符存儲(chǔ)為 VARCHAR(100) 類型的列。VARCHAR 列的最大長(zhǎng)度為
32,672 字節(jié)。在數(shù)據(jù)庫(kù)中,VARCHAR 數(shù)據(jù)只占用恰好所需的空間。
下面的數(shù)據(jù)類型用來(lái)存儲(chǔ)雙字節(jié)字符串:
- GRAPHIC 用來(lái)存儲(chǔ)固定長(zhǎng)度的雙字節(jié)字符串。GRAPHIC 列的最大長(zhǎng)度是
127 個(gè)字符。
DB2 還提供了存儲(chǔ)非常長(zhǎng)的字符串?dāng)?shù)據(jù)的數(shù)據(jù)類型。所有長(zhǎng)字符串?dāng)?shù)據(jù)類型都具有相似的特征。首先,在數(shù)據(jù)庫(kù)中此數(shù)據(jù)在物理上并沒有與行數(shù)據(jù)存儲(chǔ)在一起,這意味著需要進(jìn)行額外處理才能訪問此數(shù)據(jù)。長(zhǎng)數(shù)據(jù)類型的長(zhǎng)度最大可以定義為 2GB。但是,需要的空間只是實(shí)際使用的空間。長(zhǎng)數(shù)據(jù)類型有:
- LONG VARCHAR
- CLOB(字符大對(duì)象)
- LONG VARGRAPHIC
- DBCLOB(雙字節(jié)字符大對(duì)象)
- BLOB(二進(jìn)制大對(duì)象)
日期時(shí)間數(shù)據(jù)類型
DB2 提供了三種存儲(chǔ)日期和時(shí)間的數(shù)據(jù)類型:
- DATE
- TIME
- TIMESTAMP
這些數(shù)據(jù)類型的值在數(shù)據(jù)庫(kù)中存儲(chǔ)為一種內(nèi)部格式;但是應(yīng)用程序可以將其作為字符串操縱。在檢索這些數(shù)據(jù)類型之一時(shí),它被表示為字符串。在更新這些數(shù)據(jù)類型時(shí),將值包圍在引號(hào)中。
DB2 提供了操縱日期時(shí)間值的內(nèi)置函數(shù)。例如,可以使用 DAYOFWEEK 或 DAYNAME 函數(shù)判斷一個(gè)日期值是星期幾。使用 DAYS 函數(shù)計(jì)算兩個(gè)日期之間相差多少天。DB2 還提供了特殊寄存器以根據(jù)時(shí)間-日期時(shí)鐘生成當(dāng)前日期、時(shí)間或時(shí)間戳。例如,CURRENT DATE 返回一個(gè)表示系統(tǒng)上的當(dāng)前日期的字符串。
日期和時(shí)間值的格式取決于在創(chuàng)建數(shù)據(jù)庫(kù)時(shí)指定的數(shù)據(jù)庫(kù)國(guó)家編碼。有幾種可用的格式:ISO、USA、EUR 和 JIS。例如,如果數(shù)據(jù)庫(kù)使用 USA 格式,那么日期值的格式是 mm/dd/yyyy。在創(chuàng)建應(yīng)用程序時(shí),可以使用 BIND 命令的 DATETIME 選項(xiàng)改變格式。
TIMESTAMP 數(shù)據(jù)類型只有一種格式。字符串表示是 yyyy-mm-dd-hh.mm.ss.nnnnnn。
XML 數(shù)據(jù)類型
DB2 提供了 XML 數(shù)據(jù)類型來(lái)存儲(chǔ)格式良好的 XML 文檔。
XML 列中的值存儲(chǔ)為與字符串?dāng)?shù)據(jù)類型不同的內(nèi)部表示。要在 XML 數(shù)據(jù)類型的列中存儲(chǔ) XML 數(shù)據(jù),需要使用 XMLPARSE 函數(shù)對(duì)數(shù)據(jù)進(jìn)行轉(zhuǎn)換??梢允褂?span lang="EN-US"> XMLSERIALIZE 函數(shù)將 XML 數(shù)據(jù)類型的值轉(zhuǎn)換為 XML 文檔的串行化字符串值。DB2
還提供了許多其他的內(nèi)置函數(shù)來(lái)操縱 XML 數(shù)據(jù)類型。
用戶定義的數(shù)據(jù)類型
DB2 允許用戶定義適合自己應(yīng)用程序的數(shù)據(jù)類型。有三種用戶定義的數(shù)據(jù)類型:
- 用戶定義的單值類型:基于內(nèi)置類型定義新的數(shù)據(jù)類型。這個(gè)新類型具有該內(nèi)置類型相同的功能,但可以使用它確保只比較相同類型的值。例如,可以基于
DECIMAL(10,2) 定義一個(gè)加元類型(CANDOL)和一個(gè)美元類型(USADOL)。這兩種類型都基于同一種內(nèi)置類型,但除非應(yīng)用轉(zhuǎn)換函數(shù),否則無(wú)法比較它們。下面是創(chuàng)建
CANDOL 和 USADOL UDT 的 CREATE
TYPE 語(yǔ)句:
CREATE DISTINCT TYPE CANDOL AS
DECIMAL(10,2) WITH COMPARISONS CREATE DISTINCT TYPE USADOL AS
DECIMAL(10,2) WITH COMPARISONS |
DB2 自動(dòng)生成函數(shù)來(lái)執(zhí)行基本類型和單值類型之間的強(qiáng)制轉(zhuǎn)換,還自動(dòng)生成用于比較單值類型實(shí)例的比較操作符。下列語(yǔ)句顯示了如何創(chuàng)建帶有
CANDOL 類型列的表,以及如何使用 CANDAL 強(qiáng)制轉(zhuǎn)換函數(shù)向表中插入數(shù)據(jù):
CREATE TABLE ITEMs (ITEMID CHAR(5), PRICE
CANDOL ) INSERT INTO ITEMs
VALUES('ABC11',CANDOL(30.50) )
|
XML 數(shù)據(jù)類型
DB2 提供了 XML 數(shù)據(jù)類型來(lái)存儲(chǔ)格式良好的 XML 文檔。
XML 列中的值存儲(chǔ)為與字符串?dāng)?shù)據(jù)類型不同的內(nèi)部表示。要在 XML 數(shù)據(jù)類型的列中存儲(chǔ) XML 數(shù)據(jù),需要使用 XMLPARSE 函數(shù)對(duì)數(shù)據(jù)進(jìn)行轉(zhuǎn)換??梢允褂?span lang="EN-US"> XMLSERIALIZE 函數(shù)將 XML 數(shù)據(jù)類型的值轉(zhuǎn)換為 XML 文檔的串行化字符串值。DB2
還提供了許多其他的內(nèi)置函數(shù)來(lái)操縱 XML 數(shù)據(jù)類型。
用戶定義的數(shù)據(jù)類型
DB2 允許用戶定義適合自己應(yīng)用程序的數(shù)據(jù)類型。有三種用戶定義的數(shù)據(jù)類型:
- 用戶定義的單值類型:基于內(nèi)置類型定義新的數(shù)據(jù)類型。這個(gè)新類型具有該內(nèi)置類型相同的功能,但可以使用它確保只比較相同類型的值。例如,可以基于
DECIMAL(10,2) 定義一個(gè)加元類型(CANDOL)和一個(gè)美元類型(USADOL)。這兩種類型都基于同一種內(nèi)置類型,但除非應(yīng)用轉(zhuǎn)換函數(shù),否則無(wú)法比較它們。下面是創(chuàng)建
CANDOL 和 USADOL UDT 的 CREATE
TYPE 語(yǔ)句:
CREATE DISTINCT TYPE CANDOL AS
DECIMAL(10,2) WITH COMPARISONS CREATE DISTINCT TYPE USADOL AS
DECIMAL(10,2) WITH COMPARISONS |
DB2 自動(dòng)生成函數(shù)來(lái)執(zhí)行基本類型和單值類型之間的強(qiáng)制轉(zhuǎn)換,還自動(dòng)生成用于比較單值類型實(shí)例的比較操作符。下列語(yǔ)句顯示了如何創(chuàng)建帶有
CANDOL 類型列的表,以及如何使用 CANDAL 強(qiáng)制轉(zhuǎn)換函數(shù)向表中插入數(shù)據(jù):
CREATE TABLE ITEMs (ITEMID CHAR(5), PRICE
CANDOL ) INSERT INTO ITEMs
VALUES('ABC11',CANDOL(30.50) )
|
- 用戶定義的結(jié)構(gòu)化類型:創(chuàng)建由幾個(gè)內(nèi)置類型列組成的類型。然后,可以在創(chuàng)建表時(shí)使用這個(gè)結(jié)構(gòu)化類型。例如,可以創(chuàng)建一種名為 ADDRESS 的結(jié)構(gòu)化類型,它包含表示街道號(hào)碼、街道名、城市之類的數(shù)據(jù)。然后在定義其他表(如職工表或者供應(yīng)商表)時(shí)使用這種類型,因為這些表也需要同樣的數(shù)據(jù)。另外,結(jié)構(gòu)化類型還可以在層次結(jié)構(gòu)中有子類型。這就允許將屬于某一層次結(jié)構(gòu)的對(duì)象存儲(chǔ)在數(shù)據(jù)庫(kù)中。
- 用戶定義的引用類型:在使用結(jié)構(gòu)化類型時(shí),可以使用引用類型定義對(duì)另一個(gè)表中行的引用。這些引用看起來(lái)與參照約束相似,然而,它們不強(qiáng)制表間有關(guān)系。表中的引用允許用不同的方法指定查詢。
用戶定義的結(jié)構(gòu)化和引用類型是高級(jí)主題;這里的信息只作為對(duì)這些類型的介紹。
下來(lái)屌絲大哥為大家?guī)?lái)表的逆襲
首先 屌絲大哥帶領(lǐng)眾屌絲連接DB2
首先 啟動(dòng)DB2
db2start
db2 connect to DiaoSi user diaosi using diaosipassword
有些屌絲可能不明白怎么連接 哥來(lái)解釋 db2 connect to 數(shù)據(jù)庫(kù)名稱 user 用戶名稱 using 密碼
表
所有數(shù)據(jù)都存儲(chǔ)在數(shù)據(jù)庫(kù)的表中。表 由不同數(shù)據(jù)類型的一列或多列組成。數(shù)據(jù)存儲(chǔ)在行(或稱為記錄)中。
表是使用 CREATE TABLE SQL 語(yǔ)句定義的。DB2 還提供了一個(gè)用來(lái)創(chuàng)建表的 GUI 工具 DB2 Control Center,這個(gè)工具可以根據(jù)指定的信息創(chuàng)建一個(gè)表。它還生成 CREATE TABLE SQL 語(yǔ)句,以后可以在腳本或應(yīng)用程序中使用這個(gè)語(yǔ)句。
每個(gè)數(shù)據(jù)庫(kù)都有一組表,稱為系統(tǒng)編目表(system catalog tables),它們保存關(guān)于數(shù)據(jù)庫(kù)中所有對(duì)象的信息。DB2 為基系統(tǒng)編目表提供了視圖。數(shù)據(jù)庫(kù)中定義的每個(gè)表在編目視圖 SYSCAT.TABLES 中都有相應(yīng)的一行。數(shù)據(jù)庫(kù)中每個(gè)表的每一列在
SYSCAT.COLUMNS 中都有相應(yīng)的一行。可以用
SELECT 語(yǔ)句像查看數(shù)據(jù)庫(kù)中的任何其他表一樣查看編目視圖;但是,不能使用 INSERT、UPDATE 或 DELETE 語(yǔ)句。在執(zhí)行數(shù)據(jù)定義語(yǔ)言(DDL)語(yǔ)句(比如 CREATE)和其他操作(比如 RUNSTATS)時(shí),這些表會(huì)自動(dòng)更新。
使用 CREATE TABLE SQL 語(yǔ)句在數(shù)據(jù)庫(kù)中定義一個(gè)表。下面的語(yǔ)句創(chuàng)建一個(gè)簡(jiǎn)單的名為 BOOKS 的表,該表包含三列:
CREATE TABLE Diaosi ( DiaoSiID INTEGER, Diaosi NAME VARCHAR(100), muer CHAR(10) ) |
還可以使用 CREATE TABLE SQL 語(yǔ)句創(chuàng)建與數(shù)據(jù)庫(kù)中另一個(gè)表或視圖相似的表:
CREATE TABLE MYmuer LIKE BalckMUer |
這個(gè)語(yǔ)句創(chuàng)建一個(gè)與原始表或視圖具有相同列的表。新表的列具有與原始表或視圖中的列相同的名稱、數(shù)據(jù)類型和可空屬性。還可以指定復(fù)制其他屬性(比如列默認(rèn)值和標(biāo)識(shí)屬性)的子句。
有許多選項(xiàng)可用于 CREATE TABLE 語(yǔ)句(將在下面介紹新概念時(shí)討論它們)。CREATE TABLE SQL 語(yǔ)句的詳細(xì)信息可以在 SQL Reference 中找到(請(qǐng)參閱 參考資料)。
創(chuàng)建了表之后,有幾種方法可以在其中填充數(shù)據(jù)。INSERT 語(yǔ)句允許向表中插入一行或幾行數(shù)據(jù)。DB2 還提供了一些實(shí)用程序插入來(lái)自文件的大量數(shù)據(jù)。IMPORT 實(shí)用程序使用 INSERT 語(yǔ)句插入行。它是為向數(shù)據(jù)庫(kù)中加載少量數(shù)據(jù)而設(shè)計(jì)的。LOAD 實(shí)用程序用于加載大量數(shù)據(jù),它將行直接插入到數(shù)據(jù)庫(kù)中的數(shù)據(jù)頁(yè),因此比 IMPORT 實(shí)用程序要快得多。
在數(shù)據(jù)庫(kù)中存儲(chǔ)表
表存儲(chǔ)在數(shù)據(jù)庫(kù)的表空間 中。表空間擁有分配給它們的物理空間。在創(chuàng)建表之前必須先創(chuàng)建表空間。
在創(chuàng)建表時(shí),可以讓 DB2 把表放在默認(rèn)的表空間內(nèi),也可以指定表應(yīng)該駐留在哪個(gè)表空間內(nèi)。下面的 CREATE TABLE 語(yǔ)句將 DiaoSiS
表放在 DiaoSiINFO 表空間內(nèi):
CREATE TABLE DiaoSiS( DiaoSiID INTEGER, Diaosi NAME VARCHAR(100), muer CHAR(10) )
IN DiaoSiINFO |
可以使用 ALTER TABLE SQL 語(yǔ)句更改表的某些特征。例如,可以添加或刪除:
- 列
- 主鍵
- 一個(gè)或多個(gè)惟一性或參照約束
- 一個(gè)或多個(gè)檢查約束
下面的語(yǔ)句向 DiaoSi 表中添加一個(gè)列 DiaoSiTYPE :
ALTER TABLE DiaoSi ADD DiaoSiTYPE CHAR(1) |
posted on 2012-12-06 23:12 順其自然EVO 閱讀(365) 評(píng)論(0) 編輯 收藏 所屬分類: DB2