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>   

示例:我们在“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>     

示例:[从数据库中删除customer表]

db2 drop table professional.customers       

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

语法:

db2 drop table hierarchy <tab_name>

示例:[删除表“customer”的整个层次结构]

db2 drop table hierarchy professional.customers       
广告