DB2 - 表

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

表格类型

  • 基表:它们保存持久数据。 有不同类型的基表,包括:
    • 常规表:通用表,带索引的普通表为通用表。
    • 多维集群表(MDC):这种类型的表在物理上聚集在多个键上,用于维护大型数据库环境。 DB2 pureScale 不支持这些类型的表。
    • 插入时间聚类表 (ITC):与 MDC 表类似,行按照插入表的时间进行聚类。 它们可以是分区表。 他们也不支持 pureScale 环境。
    • 范围聚集表 (RCT):这些类型的表提供快速、直接的数据访问。 它们被实现为顺序集群。 表中的每条记录都有一个记录 ID。 这些类型的表用于数据与表中的一列或多列紧密聚集的情况。 DB2 pureScale 也不支持此类表。
    • 分区表:此类表用于数据组织架构,其中表数据被划分为多个存储对象。 数据分区可以添加到分区表、附加到分区表以及从分区表分离。 您可以在一个表空间中存储一张表的多个数据分区。
    • 时态表:数据库中表的历史记录存储在时态表中,例如之前所做修改的详细信息。
  • 临时表:对于不同数据库操作的临时工作,需要使用临时表。 临时表 (DGTT) 不会出现在系统目录中,XML 列不能在创建的临时表中使用。
  • 物化查询表:MQT 可用于提高查询性能。 这些类型的表由查询定义,该查询用于确定表中的数据。

创建表

以下语法创建表:

语法:[创建新表]

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

示例:我们创建一个表来在"professional"模式中存储"employee"详细信息。 该表具有"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>     

示例: [将员工表的"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