DB2 - 表

  • 简述

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

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

    以下语法创建表:
    语法: [创建新表]
    
    db2 create table <schema_name>.<table_name>
    (column_name column_type....) in <tablespace_name>   
    
    例子:我们创建一个表来存储“专业”模式中的“员工”详细信息。该表具有“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)    
    
    例子:[创建一个带有隐藏列“电话”的“客户”表]
    
    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,..)    
    
    例子:[在“客户”表中插入值]
    
    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 &lttab_name>    
    
    例子:[从“客户”表中检索值]
    
    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>
    
    例子:[删除表“客户”的整个层次结构]
    
    db2 drop table hierarchy professional.customers