DB2表

表是由數據庫管理器維護的邏輯結構。在表中,每個垂直塊稱爲列(元組),每個水平塊稱爲行(實體)。存儲在列和行的形式數據的集合稱爲一個表。在表中,每一列具有不同的數據類型。表被用來存儲持久數據。

表類型

  • 基本表:持有持久性數據。有不同種類的基表,其中包括:
    • 常規表:通用表,帶有索引常見表是通用表。
    • 多維聚類表(MDC):這種類型的表中的物理聚集在一個以上的鍵,它用來保持大量數據庫環境。未在DB2 pureScale的支持這些類型的表。
    • 插入時間集羣表(ITC):類似於MDC表,行是由它們插入到表的時間聚集。它們可以被分區表。他們不支持pureScale環境。
    • 系列集羣表表(RCT):這種類型的表提供數據的快速和直接訪問。這些被實現爲連續簇。表中的每個記錄有一個記錄ID。這些類型的表的使用,其中的數據被緊密地與在表中的一個或多個列羣集。這種類型的表也不會在DB2 pureScale的支持。
    • 分區表:這些類型的表中使用的數據組織模式,在這種表中的數據被劃分成多個存儲對象。數據分區可以被添加到,附着和脫離一個分區表。可以從表中一個表中存儲多個數據分區。
    • 時態表:在數據庫中的錶的歷史被存儲在表中的時間,如先前所做的修改的細節。
  • 臨時表: 對於不同的數據庫操作的臨時工作,需要使用臨時表。臨時表(DGTTs)不會出現在系統目錄中,XML列不能在創建臨時表使用。
  • 實體化查詢表: MQT可用於提高查詢性能。這些類型的表是由一個查詢,它被用於確定表中的數據來定義。

創建表

以下是創建表的語法:

語法:[創建一個新表]

db2 create table <schema_name>.<table_name> (column_name column_type....) in <tablespace_name>

比如:我們創建一個表來存儲「employee」的詳細信息在「professional」的模式。此表有「id, name, jobrole, joindate, salary」字段和本表數據將被存儲在表空間「ts1」。

db2 create table professional.employee(id int, name
varchar(50),jobrole varchar(30),joindate date, salary double) in ts1

輸出:

DB20000I The SQL command completed successfully.

表詳細信息列表

以下用於列出表的詳細信息的語法:

語法:[查看含有模式創建的表的列表]

db2 select tabname, tabschema, tbspace from syscat.tables

例如:[查看當前數據庫表的列表]

db2 select tabname, tabschema, tbspace from syscat.tables

輸出:

TABNAME TABSCHEMA TBSPACE ------------ ------------- -------- EMPLOYEE PROFESSIONAL TS1 1 record(s) selected.

表中的列的列表

以下列出一個表中的列的語法:

語法:[查看錶的列和數據類型]

db2 describe table <table_name>

例如:[查看錶'employee'的數據類型和列]

db2 describe table professional.employee

輸出

Data type Column Column name schema Data type name Length Scale Nulls ------ ----- --------- ----------------- --------- ----- ------ ID SYSIBM INTEGER 4 0 Yes NAME SYSIBM VARCHAR 50 0 Yes JOBROLE SYSIBM VARCHAR 30 0 Yes JOINDATE SYSIBM DATE 4 0 Yes SALARY SYSIBM DOUBLE 8 0 Yes 5 record(s) selected.

隱藏列

可以隱藏表的整個列。如果使用「select * from」查詢,隱藏的列不在結果表中返回。當將數據插入一個表格,一個「INSERT」沒有列列表語句,不指示值的任何隱式隱藏列。這些類型的列在物化查詢表高度引用。這些類型的列不支持創建臨時表。

隱藏列創建表

下面是使用隱藏列創建表的語法:

語法:[創建具有隱藏列的表]

db2 create table <tab_name> (col1 datatype,col2 datatype
implicitly hidden)

例如:要創建一個「customer」表中隱藏列「phone」]

db2 create table professional.customer(custid integer not null, fullname varchar(100), phone char(10) implicitly hidden)

插入數據值到表中

以下插入到表中的值的語法:

語法:[插入值到一個表]

db2 insert into <tab_name>(col1,col2,...) values(val1,val2,..)

例如:[在「customer」表中插入值]

db2 insert into professional.customer(custid, fullname, phone) values(100,'ravi','9898989') db2 insert into professional.customer(custid, fullname, phone) values(101,'krathi','87996659') db2 insert into professional.customer(custid, fullname, phone) values(102,'gopal','768678687')

輸出

DB20000I The SQL command completed successfully.

從表中檢索值

以下從表中檢索值的語法:

語法:[從表中檢索值]

db2 select * from <tab_name>

例如:[檢索「customer」表中的值]

db2 select * from professional.customer

輸出

CUSTID FULLNAME ----------- ------------------------ 100 ravi 101 krathi 102 gopal 3 record(s) selected.

從包括隱藏列的表中檢索值

以下從選定列檢索值的語法:

語法:[從表中檢索選擇隱藏的列的值]

db2 select col1,col2,col3 from <tab_name>

例如:[從表中檢索所選列的值的結果]

db2 select custid,fullname,phone from professional.customer

輸出:

CUSTID FULLNAME PHONE ------- --------- ------------ 100 ravi 9898989 101 krathi 87996659 102 gopal 768678687 3 record(s) selected.

如果想看到隱藏的列中的數據,需要執行「DESCRIBE」命令。

語法:

db2 describe table <table_name> show detail

示例:

db2 describe table professional.customer show detail

輸出:

Column name Data type schema Data type name Column column Partitionkey code Length Scale Nulls number sequence page Hidden Default --------------- -------------------- --------------- -------- ---- ---- -------- ---------- ------------- -------- ----------- ------ --- CUSTID SYSIBM INTEGER 4 0 No 0 0 0 No FULLNAME SYSIBM VARCHAR 100 0 Yes 1 0 1208 No PHONE SYSIBM CHARACTER 10 0 Yes 2 0 1208 Implicitly 3 record(s) selected.

改變表列的類型

可以使用「alter」命令,如下所示修改表結構:

語法

db2 alter table <tab_name> alter column <col_name> set data type <data_type>

示例:員工表列「ID」從「int」修改到「bigint」的數據類型]

db2 alter table professional.employee alter column id set data type bigint

輸出:

DB20000I The SQL command completed successfully.

變更列名

可以更改列名,如下所示:

語法:[修改表的列名從舊名稱到新名稱]

db2 alter table <tab_name> rename column <old_name> to <new_name>

示例:爲了「customers」表列名從「fullname」修改爲「custname」]

db2 alter table professional.customer rename column fullname to custname

刪除表

要刪除任何表,則需要使用「DROP」命令,如下所示:

語法

db2 drop table <tab_name>

示例:[從數據庫中刪除customer表]

db2 drop table professional.customers

要刪除表(包括觸發器和關係),需要使用「DROP TABLE HIERARCHY」命令刪除整個層次。

語法:

db2 drop table hierarchy <tab_name>

示例:[要刪除表'customer'的整個層次]

db2 drop table hierarchy professional.customers