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

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

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