Db2 简明教程

DB2 - Tables

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

Type of tables

  1. 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 : 数据库中表的变更历史记录存储在临时表中,比如以前执行的修改的详细信息。

  2. Temporary Tables : 对于不同数据库操作的临时工作,需要使用临时表。临时表 (DGTT) 不显示在系统目录中,不能在创建的临时表中使用 XML 列。

  3. Materialized Query Tables : MQT 可用于提高查询的性能。这类表由查询定义,该查询用于确定表中的数据。

Creating Tables

以下语法创建表:

Syntax : [要创建新表]

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

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

Output:

DB20000I The SQL command completed successfully.

Listing table details

以下语法用于列出表详细信息:

Syntax : [要查看使用架构创建的表的列表]

db2 select tabname, tabschema, tbspace from syscat.tables

Example : [要查看当前数据库中的表的列表]

db2 select tabname, tabschema, tbspace from syscat.tables

Output:

TABNAME      TABSCHEMA     TBSPACE
------------ ------------- --------
EMPLOYEE     PROFESSIONAL    TS1


 1 record(s) selected.

Listing columns in a table

以下语法列出表格中的列:

Syntax : [要查看表的列和数据类型]

db2 describe table <table_name>

Example : [要查看表“employee”的列和数据类型]

db2 describe table professional.employee

Output:

             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.

Hidden Columns

可以隐藏表中的整个列。如果调用“select * from”查询,则结果表中不会返回隐藏的列。将数据插入表时,没有列列表的“INSERT”语句不会期望任何隐式隐藏列的值。这些类型的列在物化查询表中高度引用。这些类型的列不支持创建临时表。

Creating table with hidden column

以下语法使用隐藏列创建表:

Syntax : [要创建带有隐藏列的表]

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

Example : [要创建带有隐藏列“phone”的“customer”表]

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

Inserting data values in table

以下语法在表中插入值:

Syntax : [要在表中插入值]

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

Example : [要在“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')

Output:

DB20000I  The SQL command completed successfully.

Retrieving values from table

以下语法从表中检索值:

Syntax :[从表中检索值]

db2 select * from &lttab_name>

Example :[从“customer”表中检索值]

db2 select * from professional.customer

Output:

CUSTID      FULLNAME
----------- ------------------------
        100 ravi

        101 krathi

        102 gopal

  3 record(s) selected.

Retrieving values from a table including hidden columns

以下语法从选定列中检索值:

Syntax :[从表中检索选定的隐藏列值]

db2 select col1,col2,col3 from <tab_name>

Example :[从表中检索选定列值结果]

db2 select custid,fullname,phone from professional.customer

Output:

CUSTID  FULLNAME    PHONE
------- ---------   ------------
100     ravi        9898989

101     krathi      87996659

102     gopal       768678687

  3 record(s) selected.

如果您想要查看隐藏列中的数据,您需要执行“DESCRIBE”命令。

Syntax

db2 describe table <table_name> show detail

Example:

db2 describe table professional.customer show detail

Output:

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.

Altering the type of table columns

您可以使用此“alter”命令修改我们的表结构,如下所示:

Syntax

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

Example: :[将员工表的列“id”的数据类型从“int”修改为“bigint”]

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

Output:

DB20000I The SQL command completed successfully.

Altering column name

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

Syntax :[将表的列名从旧名称修改为新名称]

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

Example: :[将“customers”表中列名从“fullname”修改为“custname”]

db2 alter table professional.customer rename column fullname to custname

Dropping the tables

要删除任何表,您需要使用“DROP”命令,如下所示:

Syntax

db2 drop table <tab_name>

Example: :[从数据库中删除客户表]

db2 drop table professional.customers

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

Syntax

db2 drop table hierarchy <tab_name>

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

db2 drop table hierarchy professional.customers