教程 > DB2 教程 > DB2 基础 阅读:42

DB2 表

表是由数据库管理器维护的逻辑结构。 在表中,每个垂直块称为列(元组),每个水平块称为行(实体)。 以列和行的形式存储的数据集合称为表。 在表中,每一列都有不同的数据类型。 表用于存储持久数据。


表类型

  • 基表:它们保存持久数据。 有不同种类的基表,包括:
    • Regular Tables : General purpose tables,带索引的Common tables是通用表。
    • 多维聚类表 (MDC) :这种类型的表在物理上聚集在多个键上,用于维护大型数据库环境。 DB2 pureScale 不支持这些类型的表。
    • 插入时间聚类表 (ITC) :与 MDC 表类似,行按插入表的时间进行聚类。 它们可以是分区表。 它们也不支持 pureScale 环境。
    • Range-Clustered tables 表 (RCT) :这些类型的表提供快速和直接的数据访问。 这些被实现为顺序集群。 表中的每条记录都有一个记录 ID。 这些类型的表用于数据与表中的一个或多个列紧密聚集的地方。 这种类型的表在 DB2 pureScale 中也不支持。
    • 分区表 :这些类型的表用于数据组织架构,其中表数据被划分为多个存储对象。 可以向分区表添加、附加和分离数据分区。 您可以将一个表中的多个数据分区存储在一个表空间中。
    • 时态表 :数据库中表的历史记录存储在时态表中,例如之前所做修改的详细信息。
  • 临时表 :针对不同数据库操作的临时工作,需要使用临时表。 临时表 (DGTT) 不出现在系统目录中,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)

示例

创建一个带有隐藏列“phone”的“customer”表

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>

示例

employee 表的“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>

示例

从数据库中删除客户表

db2 drop table professional.customers

要删除表的整个层次结构(包括触发器和关系),需要使用 DROP TABLE HIERARCHY 命令。

语法

db2 drop table hierarchy <tab_name>

示例

删除表“customer”的整个层次结构

db2 drop table hierarchy professional.customers

查看笔记

扫码一下
查看教程更方便