
DB2 基础: 约束
热 荐
【字体:小 大】
DB2 基础: 约束
作者:- 文章来源:- 点击数:1475 更新时间:2006-4-22 
Roman B. Melnyk
DB2 Information Development,IBM Canada Ltd.
2004 年 3 月 约束被 DB2 UDB 用来对数据实施业务规则以及帮助维护数据库完整性。本文描述了 DB2 UDB 所支持的不同类型的约束并且提供了每种约束类型的实例。此外,作者还讲述了约束管理的基础知识(使用命令行或 DB2 Control Center)。
约束被 DB2 Universal Database(TM)(DB2 UDB)用来对数据实施业务规则。本文描述了下列类型的约束: 非空(NOT NULL) 惟一 主键 外键 表检查 此外,还有另一种名为 信息约束(informational constraint)的约束。与上面所列的这五种约束类型不同的是,信息约束不是由数据库管理器实施的,但是 SQL 编译器可用它来提高查询性能。在这篇文章中,我将只关注上面所列的这几类约束,而不会讨论信息约束。
您可以在创建一个新表时定义一个或多个 DB2 UDB 约束,也可以稍后通过更改表来定义它们。CREATE TABLE 语句是十分复杂的;所以尽管实际上其选项中只有一小部分是用于定义约束的,但是当在语法图( 图 1和 图 2)中进行查看时,那些选项本身看上去就相当复杂。通过 DB2 Control Center 可使约束管理更简单、方便。
图 1. CREATE TABLE 语句的部分语法,显示了用于定义约束的子句

约束定义与它们所应用的数据库相关联,并存储在数据库目录中( 表 1)。您可以查询数据库目录来检索并查看该信息。您可以从命令行直接进行(请记住要首先建立数据库连接),同样,您会发现通过 Control Center 来访问这些信息会更方便。
可将所创建的约束像对待其他数据库对象一样进行处理。它们具有名称和关联模式(creator ID),并且在有些情况下还能被撤销(删除)。
图 2. CREATE TABLE 语句的部分语法,显示了用于定义约束的子句(续)

表 1. 数据库目录中的约束信息。要运行成功,对目录的查询需要建立数据库连接。
目录视图 视图列 描述 查询实例 SYSCAT.CHECKS 为每个表检查约束包含一行记录 db2 select constname, tabname, text from syscat.checks SYSCAT.COLCHECKS 为表检查约束所引用的每一列包含一行记录 db2 select constname, tabname, colname, usage from syscat.colchecks SYSCAT.COLUMNS NULLS 指明一列是可为空(Y)还是不可为空(N) db2 select tabnam
