LanDom
作者LanDom·2010-04-30 18:14
软件开发工程师·互联网企业

DB2 表

字数 2010阅读 637评论 0赞 0

DB2 是关系型数据库的代表,二维表是关系型数据库的典型数据结构。在 DB2 中真正存储数据的对象就是表(Table)。表中包含若干列,每一列都要指定列名和数据类型,一个列又可以称为一个字段。各个列定义好之后,表的框架就搭建好了。然后可以在表中填充数据,数据是以行的形式存在于表中的,每一行数据又称为一条记录。

3.8.1 普通表的创建、修改和删除

创建表的典型语句为:

CREATE TABLE < 表名称 > ( 字段 1 数据类型 [ 列级别约束 ], 字段 2 数据类型 [ 列级别约束 ], …… 字段 n 数据类型 [ 列级别约束 ,] [ 表级别约束 ] ) [IN < 表空间名称 >] [INDEX IN < 表空间名称 >] [LONG IN < 表空间名称 >]

其中数据类型参见 3.11 节,约束参见 3.12 节,表空间参见 3.6 节。与在数据库原理课程中学过的标准建表语句稍有不同的是,可以指定这张表的普通数据放在哪个表空间当中,索引放在哪个表空间当中,大对象数据放在哪个表空间当中。如果没有指定与表空间相关的子句,这些数据将自动创建在系统默认的表空间 USERSPACE1 中。

表创建好之后可以进行一定程度的修改,通常来说,为了不影响已经存在的业务代码的运行,应该只允许对现有表添加新的字段,或者把字符类型的字段的宽度增加,或者修改约束条件,其他的修改操作(例如删除某个字段)即使在语法上允许,也尽量避免使用。修改表使用 ALTER TABLE 语句,具体的语法请参见 DB2 信息中心,此处不再赘述。

删除表使用 DROP TABLE 语句,需要注意的是,删除表既删除其中的数据,也删除表的定义。

考虑到读者的基础,不再给出创建、修改、删除基本表的例子,需要更多信息的读者可以阅读任何一本数据库原理的教材中关于 SQL 语句的章节。

3.8.2 用户临时表

用户临时表又称为已声明的全局临时表(Declared Global Temporary Table,简称 DGTT),与普通的用户表不同,用户临时表并不是一直存储在硬盘上,而是在一个应用程序结束之后,与之相关的用户临时表会自动从系统中删除。另外,用户临时表还有一些安全性和性能上的优势,如:

(1)一个用户(或者应用程序)定义的用户临时表不会被其他用户(或者应用程序)看到;

(2)在对用户临时表操作的时候,可以记录事务日志,也可以不记录事务日志;

(3)不进行系统编目;

(4)没有行锁;

(5)不进行权限检查。

在使用用户临时表的时候容易引起误解的是,它仍然支持索引,可以在它上面创建任何标准的索引,同时它也支持统计,可以对它进行 RUNSTATS 操作(参见 7.8.3 小节)。

例 3‑12 用户临时表的创建。

CREATE USER TEMPORARY TABLESPACE apptemps MANAGED BY SYSTEM USING ('apptemps'); DECLARE GLOBAL TEMPORARY TABLE t_employees LIKE employee NOT LOGGED; DECLARE GLOBAL TEMPORARY TABLE SESSION.t_dept ( deptid CHAR(6), deptname CHAR(20) ) ON COMMIT DELETE ROWS NOT LOGGED; DECLARE GLOBAL TEMPORARY TABLE SESSION.t_projects AS ( full select ) DEFINITION ONLY ON COMMIT PRESERVE ROWS NOT LOGGED WITH REPLACE IN TABLESPACE apptemps;

用户临时表空间默认创建数据库的时候没有创建,需要手工创建。

用户临时表使用 DECLARE 创建,使用 DECLARE 语句意味着不在系统目录中写记录。

第一个临时表 t_employees,没有指定模式,其模式被默认成 SESSION,LIKE 只是把 emplyee 的结构复制过来,而不会复制数据,NOT LOGGED 指定此次事务不记日志。

第二个临时表,当 COMMIT 语句执行后就删除临时表中的行,但是表结构还存在,直到连接断开为止。

第三个临时表,当 COMMIT 语句执行后还保持临时表中的行,WITH REPLACE 语句表示如果此表之前已经存在,则替换原来的表。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

X社区推广