DB2 9 底子底细(730 检验)认证指南,第 5 部门: 措置奖惩 DB2 工具(3)

developerWorks









一切数据都存储在数据库的表中。 由不合数据典范榜样的一列或多列组成。数据存储内行(或称为记录)中。

表是运用 CREATE TABLE SQL 语句定义的。DB2 还供给了一个用来确立表的 GUI 工具 DB2 Control Center,这个工具可以按照指定的信息确立一个表。它还生成 CREATE TABLE SQL 语句,此后可以在脚本或应用次第中运用这个语句。

每个数据库都有一组表,称为零碎编目表(system catalog tables),它们生存关于数据库中一切工具的信息。DB2 为基零碎编目表供给了视图。数据库中定义的每个表在编目视图 SYSCAT.TABLES 中都有响应的一行。数据库中每个表的每一列在 SYSCAT.COLUMNS 中都有响应的一行。可以用 SELECT 语句像检察数据库中的任何其他表一样检察编目视图;但是,不能运用 INSERTUPDATEDELETE 语句。在施行数据定义语言(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) )
          





版权声明: 原创作品,同意转载,转载时请务必以超链接体式花腔标明文章 原始理由 、作者信息和本声明。否则将追究功令责任。

原文地址:https://www.cnblogs.com/zgqjymx/p/1972951.html