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