,表,一切数据都存储在数据库的表中。,表,由不合数据典范榜样的一列或多列组成。数据存储内行(或称为记录)中。,表是运用,CREATETABLE,SQL语句定义的。DB2还供给了一个用来确立表的GUI

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



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




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

表是运用 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 9 底子底细(730 检验)认证指南,第 5 部门: 措置奖惩 DB2 工具(3)_供给_05
DB2 9 底子底细(730 检验)认证指南,第 5 部门: 措置奖惩 DB2 工具(3)_数据库_06
DB2 9 底子底细(730 检验)认证指南,第 5 部门: 措置奖惩 DB2 工具(3)_数据库_07





在数据库中存储表

表存储在数据库的表空间 中。表空间拥有分配给它们的物理空间。在确立表之前必须先确立表空间。

在确立表时,可以让 DB2 把表放在默许的表空间内,也可以指定表应该驻留在哪个表空间内。上面的 CREATE TABLE 语句将 BOOKS 表放在 BOOKINFO 表空间内:

CREATE TABLE BOOKS ( BOOKID INTEGER, 
                     BOOKNAME VARCHAR(100), 
                     ISBN CHAR(10) ) 
             IN BOOKINFO


虽然我们不在这里详细批评冲突表空间,但精确地定义表空间将会影响数据库的功效和可维护性,体会这一点很重要。关于表空间的更多信息,请参考 本系列的第二篇教程。

DB2 9 底子底细(730 检验)认证指南,第 5 部门: 措置奖惩 DB2 工具(3)_供给_05
DB2 9 底子底细(730 检验)认证指南,第 5 部门: 措置奖惩 DB2 工具(3)_数据库_06
DB2 9 底子底细(730 检验)认证指南,第 5 部门: 措置奖惩 DB2 工具(3)_数据库_07





点窜表

可以运用 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


表的某些特征弗成以更改。比方,弗成以点窜某些列的数据典范榜样、表驻留的表空间或列的次第。要更改这样的特征,必须生存表数据,删除表,然后重新确立表。

DB2 9 底子底细(730 检验)认证指南,第 5 部门: 措置奖惩 DB2 工具(3)_供给_05
DB2 9 底子底细(730 检验)认证指南,第 5 部门: 措置奖惩 DB2 工具(3)_数据库_06
DB2 9 底子底细(730 检验)认证指南,第 5 部门: 措置奖惩 DB2 工具(3)_数据库_07





删除表

DROP TABLE 语句将表从数据库中删除,数据和表定义都被删除。假定为表定义了索引或许束厄狭窄,它们也同时被删除。

上面的 DROP TABLE 语句从数据库中删除 BOOKS 表:

DROP TABLE BOOKS
          



DB2 9 底子底细(730 检验)认证指南,第 5 部门: 措置奖惩 DB2 工具(3)_供给_05
DB2 9 底子底细(730 检验)认证指南,第 5 部门: 措置奖惩 DB2 工具(3)_数据库_06
DB2 9 底子底细(730 检验)认证指南,第 5 部门: 措置奖惩 DB2 工具(3)_数据库_07





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) )
          





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