DB2 9 底子底细(730 检验)认证指南,第 5 部门: 措置奖惩 DB2 工具(3)
![]()
表
一切数据都存储在数据库的表中。表 由不合数据典范榜样的一列或多列组成。数据存储内行(或称为记录)中。
表是运用 CREATE TABLE SQL 语句定义的。DB2 还供给了一个用来确立表的 GUI 工具 DB2 Control Center,这个工具可以按照指定的信息确立一个表。它还生成 CREATE TABLE SQL 语句,此后可以在脚本或应用次第中运用这个语句。
每个数据库都有一组表,称为零碎编目表(system catalog tables),它们生存关于数据库中一切工具的信息。DB2 为基零碎编目表供给了视图。数据库中定义的每个表在编目视图 SYSCAT.TABLES 中都有响应的一行。数据库中每个表的每一列在 SYSCAT.COLUMNS 中都有响应的一行。可以用 SELECT 语句像检察数据库中的任何其他表一样检察编目视图;但是,不能运用 INSERT、UPDATE 或 DELETE 语句。在施行数据定义语言(DDL)语句(比如 CREATE)和其他操作(比如 RUNSTATS)时,这些表会主动更新。
确立表
运用 CREATE TABLE SQL 语句在数据库中定义一个表。上面的语句确立一个粗略的名为 BOOKS 的表,该表包含三列:
CREATE TABLE BOOKS ( BOOKID INTEGER,
BOOKNAME VARCHAR(100),
ISBN CHAR(10) )
还可以运用 CREATE TABLE SQL 语句确立与数据库中另一个表或视图沟通的表:
CREATE TABLE MYBOOKS LIKE BOOKS
这个语句确立一个与原始表或视图具有沟通列的表。新表的列具有与原始表或视图中的列沟通的称号、数据典范榜样和可空属性。还可以指定复制其他属性(比如列默许值和标识属性)的子句。
有许多选项可用于 CREATE TABLE 语句(将在上面引见新不雅概念时批评冲突它们)。CREATE TABLE SQL 语句的详细信息可以在 SQL Reference 中找到(请参阅 参考资料)。
确立了表之后,有几种要领可以在个中添补数据。INSERT 语句同意向表中拔出一行或几行数据。DB2 还供给了一些适用次第拔出来自文件的少量数据。IMPORT 适用次第运用 INSERT 语句拔出行。它是为向数据库中加载年夜批数据而诡计的。LOAD 适用次第用于加载少量数据,它将行直接拔出到数据库中的数据页,是以比 IMPORT 适用次第要快得多。
![]()
![]()
![]()
在数据库中存储表
表存储在数据库的表空间 中。表空间拥有分配给它们的物理空间。在确立表之前必须先确立表空间。
在确立表时,可以让 DB2 把表放在默许的表空间内,也可以指定表应该驻留在哪个表空间内。上面的 CREATE TABLE 语句将 BOOKS 表放在 BOOKINFO 表空间内:
CREATE TABLE BOOKS ( BOOKID INTEGER,
BOOKNAME VARCHAR(100),
ISBN CHAR(10) )
IN BOOKINFO
虽然我们不在这里详细批评冲突表空间,但精确地定义表空间将会影响数据库的功效和可维护性,体会这一点很重要。关于表空间的更多信息,请参考 本系列的第二篇教程。
![]()
![]()
![]()
点窜表
可以运用 ALTER TABLE SQL 语句更改表的某些特征。比方,可以添加或删除:
- 列
- 主键
- 一个或多个专一性或参照束厄狭窄
- 一个或多个搜检核检束厄狭窄
上面的语句向 BOOKS 表中添加一个列 BOOKTYPE:
ALTER TABLE BOOKS ADD BOOKTYPE CHAR(1)
还可以点窜表中特定列的特征:
- 列的标识属性
- 字符串列的长度
- 列的数据典范榜样
- 列的可空性
- 列的束厄狭窄
关于点窜列有一些限制:
- 在点窜字符串列的长度时,只能增加长度。
- 在点窜列的数据典范榜样时,新的数据典范榜样必须与现有的数据典范榜样兼容。比方,可以将 CHAR 列转换为 VARCHAR 列,但是不能将它们转换为 GRAPHIC 或数字列。数字列可以转换为任何其他数字数据典范榜样,只需新数据典范榜样的长度足以容纳个中的值。比方,可以将 INTEGER 列转换为 BIGINT,但是 DECIMAL(10,2) 列不能转换为 SMALLINT。
- 固定长度的字符串可以转换为可变长度的字符串,可变长度的字符串也可以转换为固定长度的字符串。比方,CHAR(100) 可以转换为 VARCHAR(150)。关于可变长度的图形字符串也有沟通的限制。
以下语句将 BOOKNAME 列的 DATATYPE 从 VARCHAR(100) 改为 VARCHAR(200),并将 ISBN 列的可空性改为 NOT NULL:
ALTER TABLE BOOKS ALTER BOOKNAME SET DATA TYPE VARCHAR(200) ALTER ISBN SET NOT NULL
表的某些特征弗成以更改。比方,弗成以点窜某些列的数据典范榜样、表驻留的表空间或列的次第。要更改这样的特征,必须生存表数据,删除表,然后重新确立表。
![]()
![]()
![]()
删除表
DROP TABLE 语句将表从数据库中删除,数据和表定义都被删除。假定为表定义了索引或许束厄狭窄,它们也同时被删除。
上面的 DROP TABLE 语句从数据库中删除 BOOKS 表:
DROP TABLE BOOKS
NOT NULL、DEFAULT 和 GENERATED 列选项
表的列在 CREATE TABLE 语句中由列名和数据典范榜样指定。还可以指定一些特此外子句来限制列中的数据。
在默许情形形象下,列同意空值。假定不想同意空值,可感受列指定 NOT NULL 子句。还可以运用 WITH DEFAULT 子句和一个默许值来指定默许值。上面的 CREATE TABLE 语句确立一个表 BOOKS,在这个表中 BOOKID 列不同意空值,BOOKNAME 的默许值为 TBD:
CREATE TABLE BOOKS ( BOOKID INTEGER NOT NULL,
BOOKNAME VARCHAR(100) WITH DEFAULT 'TBD',
ISBN CHAR(10) )
在 BOOKS 表中,BOOKID 是为每本书指定的专一的编号。可以运用 GENERATED ALWAYS AS IDENTITY 子句指定由 DB2 生成 BOOKID,而不用让应用次第生成标识符:
CREATE TABLE BOOKS ( BOOKID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY
(START WITH 1, INCREMENT BY 1),
BOOKNAME VARCHAR(100) WITH DEFAULT 'TBD',
ISBN CHAR(10) )
GENERATED ALWAYS AS IDENTITY 招致为每个记录生成一个 BOOKID。生成的第一个值是 1,经由在后面的值上加 1 生成后续的值。
还可以运用 GENERATED ALWAYS 选项让 DB2 主动盘算列的值。上面的示例定义一个名为 AUTHORS 的表,个中有划分生存小说和非小平话籍数目的 FICTIONBOOKS 和 NONFICTIONBOOKS 列。经由把 FICTIONBOOKS 和 NONFICTIONBOOKS 列相加来盘算 TOTALBOOKS 列:
CREATE TABLE AUTHORS (AUTHORID INTEGER NOT NULL PRIMARY KEY,
LNAME VARCHAR(100),
FNAME VARCHAR(100),
FICTIONBOOKS INTEGER,
NONFICTIONBOOKS INTEGER,
TOTALBOOKS INTEGER GENERATED ALWAYS
AS (FICTIONBOOKS NONFICTIONBOOKS) )
版权声明: 原创作品,同意转载,转载时请务必以超链接体式花腔标明文章 原始理由 、作者信息和本声明。否则将追究功令责任。

浙公网安备 33010602011771号