当前位置: 首页 > 图文教程 > 数据库 > DB2 > 使用 DB2 对象:创建约束

DB2
监控 DB2 活动之使用解释工具分析SQL
DB2 Viper 快速入门
监控 DB2 活动之Visual Explain详细介绍
监控 DB2 活动之其他问题判断工具
DB2 与 Ruby on Rails 入门之一
DB2 实用程序介绍之EXPORT实用程序
浅谈DB2数据库故障处理及最佳实践
使用重定向恢复DB2数据库
DB中如何查询Table占用空间的大小
DB2 实用程序介绍之LOAD实用程序
DB2 实用程序介绍之数据移动实用程序
DB2 实用程序介绍之IMPORT实用程序
SQL Server 2005对DBA的要求是否会更高
IBM XML tools for DB2 Version 9.5 及其用法
DB2 VS2005.Net插件进行XML数据验证
三种级别的DB2数据库字符集的设置与修改
理解DB2 9中新的查询:XQuery
DB2 存储和检索 XML 数据
VS2005构建针对DB2的应用程序和Web站点
.Net开发采用DB2 XML的应用程序示例

使用 DB2 对象:创建约束


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-30   浏览: 112 ::
收藏到网摘: n/a

  约束使 DBMS 能够防止不正确的或意外的数据输入表中,从而确保表中数据的完整性。DB2 中使用以下约束实施数据完整性:

  主键(Primary key)

  用来确保一个列或一组列的值的惟一性。每个表只能有一个主键。

  外键(Foreign key)或称为引用约束(referential constraint)

  用来在两个表之间建立引用关系,这两个表通常称为子表和父表,用来建立引用关系的操作在 REFERENCE 子句中定义。当在父表或子表中插入/删除/更新的数据满足预定义的条件时,就执行这个操作。外键总是应该引用父表中的主键或惟一键。

  惟一键(Unique key)

  用来确保一个列或一组列的值的惟一性。与主键相反,一个表可以有多个惟一键。惟一键还使外键能够引用主键之外的数据列。每当定义主键或惟一键时,就会创建惟一索引。

  检查约束(Check constraint)

  在表级上针对一个或多个表列定义检查约束,它们可以对这些表列实施指定的规则,使这些列中插入或更新的数据满足检查约束中预先定义的条件。与其他约束不同,检查约束可以在某些操作期间临时关闭,比如 LOAD,在对约束进行检查之前,表处于检查未决状态。

  可以在创建表时创建约束,也可以使用 ALTER TABLE 语句或 GUI 界面在以后添加约束。

  以下练习演示如何创建和使用这些约束。它还演示如何使用 Command Editor 执行一些日常管理任务:

  1、在 Control Center 主菜单中,点击 Tools > Command Editor。出现 Command Editor 窗口。使用这个编辑器编辑 DB2 命令,执行它们,然后查看返回的 DB2 或 SQL 消息。

  2、首先在 AUTHOR 表中添加另一个列,然后在这个表上添加一个主键。添加以下命令并点击图1 所示的绿色执行按钮:

  图1 Command Editor —— 修改表

  Command Editor —— 修改表

  在添加主键时,由于 AUTHOR_ID 上已经有了一个惟一索引, DB2 要在幕后创建一个惟一索引。 DB2 为这个主键使用现有的索引,并返回 SQL0598W。

  3、在 Command Editor 中,还可以选择将现有命令保存到文件中,或者用接下来要编辑或运行的新命令替换它们。

  4、将 Command Editor 窗口中的命令替换为以下命令:

  CONNECT TO HWLD;
  CREATE TABLE HWLD.MODULE
  ( MODULE_ID INT NOT NULL,
  MODULE_NAME CHAR(20) NOT NULL,
  PRIMARY KEY (MODULE_ID),
  CONSTRAINT MID_UNIQ UNIQUE
  (MODULE_ID, MODULE_NAME),
  CONSTRAINT MID_CHECK CHECK (MODULE_ID >= 0)
  )
  IN TBSP_DATA1 INDEX IN TBSP_INDEX1;
  CONNECT RESET;

  5、这个 CREATE TABLE 命令在创建表期间创建一个主键约束、一个惟一键约束和一个检查约束。检查约束要求数据列 MODULE_ID 中的值都是正数。图2显示预期的运行结果:

  图 2. Command Editor —— 创建表

  Command Editor —— 创建表

  可以使用 CREATE TABLE 向导完成同样的任务。

  6、现在,已经创建了两个表。表 HWLD.AUTHOR 包含 Hello World 模块的所有作者信息。表 HWLD.MODULE 包含所有 Hello World 系列模块信息。现在,创建另一个表 HWLD.PARTICIPANT,它包含所有参与者的信息,包括姓名、部门(可选)、参与的模块和测试分数。

  表 HWLD.PARTICIPANT 应该具有以下的表定义:

  (PAR_NAME VARCHAR(50) NOT NULL,
  PAR_ID BIGINT NOT NULL,
  PAR_AREA CHAR(20),
  MODULE_ID INT,
  PAR_TEST_SCORE INT)

  7、注意以下条件:

  • 每个人可以多次测试多个模块
  • 测试分数应该在 0 到 100 之间
  • HWLD.PARTICIPANT 中的 MODULE_ID 应该引用 HWLD.MODULE 中的 MODULE_ID。当从表 HWLD.MODULE 中删除一个模块时,将 PARTICIPANT 表中对应的 MODULE_ID 设置为 NULL,所以 NULL 值在这里不会是无效的 MODULE_ID 值。
  • 当在 HWLD.PARTICIPANT 表中插入一行时,如果它的 MODULE_ID 在 HWLD.MODULE 中不存在,那么插入失败。
  • 当更新表 HWLD.MODULE 中的一个模块时,如果 HWLD.PARTICIPANT 表中存在着引用这个 MODULE_ID 的记录,那么更新失败。

  8、添加以下约束来实施前面的条件:

  • 列 PAR_TEST_SCORE 上的检查约束确保它的值在 0 到 100 之间
  • MODULE_ID 上的外键引用 HWLD.MODULE 中的 MODULE_ID,并设置 ON DELETE SET NULL,ON UPDATE RESTRICT(注意,关于插入的第 4 条规则在默认情况下已经实施了)。

  可以在创建表 HWLD.PARTICIPANT 时创建这些约束。

  9、在 Control Center 中,从 Tables 视图启动 Create New Table 向导。选择 HWLD 作为表模式,输入 PARTICIPANT 作为表名,并添加注释。点击 Next。

  10、在 Columns 页面上,点击 Add 添加第一个列。指定 PAR_NAME VARCHAR(50) NOT NULL 并选择 VARCHAR 作为数据类型。

  11、点击 OK。在 Columns 页面上,添加第二个列 PAR_ID BIGINT NOT NULL。点击 OK。添加第三个列 PAR_AREA CHAR(20)。注意,这个列允许 NULL 值。

  12、同样,添加第四个列 MODULE_ID INT 和第五个列 PAR_TEST_SCORE INT。它们的数据类型都是 INTEGER,都允许 NULL 值。

  13、检查已经添加的列。

  图3. Create Table 向导 —— 列

  Create Table 向导 —— 列

  14、点击 Next。再次点击 Next 跳过 Data Partitions 页面。

  15、与前面创建的两个表相似,表 HWLD.PARTICIPANT 也为数据和索引使用单独的表空间。选择 TBSP_DATA1 作为数据的表空间,选择 TBSP_INDEX1 作为索引的表空间。点击 Next。

  16、在 Keys 页面上,点击 Add Foreign。输入 PMID_FOR 作为外键名。

  图4. Create Table 向导 —— 添加外键

  Create Table 向导 —— 添加外键

  17、选择 HWLD.MODULE 作为父表。在 Available columns 中选择 MODULE_ID,并点击 > 将它添加为外键。对于 On delete 选择 SET NULL,对于 On update 选择 RESTRICT。点击 OK。应该会看到定义了以下约束:

  图5. Create Table 向导 —— 键

  Create Table 向导 —— 键

  点击 Next。(在这里,可以创建不同类型的键,比如惟一键和主键。在这个练习中,只创建一个外键。)

  18、再次点击 Next 跳过 Dimensions 页面。

  19、在 Define Check Constraints 页面上,点击 Add 启动 Add Check Constraint 向导。

  20、输入 PAR_SCORE_CHECK 作为检查约束名。添加以下代码作为检查条件: PAR_TEST_SCORE BETWEEN 0 and 100

  选择两个约束属性。

  21、输入注释。点击 OK 添加这个约束。点击 Finish。在 DB2 Message 窗口中应该会返回 DB20000。关闭它。

  22、检查新创建的 PARTICIPANT 表是否显示在 Control Center 中。

  回顾 HWLD.PARTICIPANT,考虑您是否能够想出可以用约束实现的其他条件。(提示:当前的实现对于参与者以及分配给他们的参与者 ID 没有要求惟一性;实现这一条件有两种方法。一种是将当前的 HWLD.PARTICIPANT 表分割成两个表,对参与者 ID 实施惟一性约束,并建立引用参与者 ID 的外键。您能想出另一种方法吗?)

  下图总结了前面创建的三个表以及在其中添加的约束。

  图6. 刚创建的表及其约束

  刚创建的表及其约束