e股脑电脑教程网
  • 首 页
  • 操作系统
  • 应用软件
  • 下载工具
  • 影音视频
  • 办公软件
  • 媒体制作
  • 网站建设
  • 平面设计
  • 数据库
  • 程序开发
  • 视频教程
编辑推荐: | 文章搜索:
您现在的位置: e股脑 >> 数据库 >> DB2教程 >> DB2 基础: 约束 >> 教程正文
 
教程搜索
 
 
相关教程
  • 数据挖掘器: 警告 — 及时采取行动
  • UNIX、Linux 和 Windows 的生动简介
  • “总览图”: IBM DB2 通用数据库和信息
  • DB2 大事记
  • 数据管理部门副总裁兼 CTO:Don Hader
  • IBM 联邦数据库技术
  • 唐纳德.海德勒(Donald J. Haderle)
  • 数据库未来展望
  • 哪一个分布式 DB2 UDB V8 版本适合您?
  • 从数据管理到信息集成: 自然的演变
  • 联邦 - 数据库互操作性(第 1 部分)
  • 成功是必然的(中)
  • 成功是必然的(上)
  • 成功是必然的(下)
  • DB2 信息集成: 总览图
  • IBM 杰出工程师兼信息集成主管 Nelson
 
 

图文教程


  • Windows抢了谁的饭碗 非主流操作系统To

  • 地球还是火星 平常心看“非主流”

  • 综合运用Office 2007批量制作奖状

  • 没有系统盘如何才能修复受损系统?

  • 巧妙运用Excel中边界的附加功能!
 
 
赞 助 商
 
 
DB2 基础: 约束
  • 来源:e股脑
  • 点击次数:
  • 更新时间:2007-8-9
E statement are not valid because the primary key, unique constraint or unique index identified by "1" constrains table "MELNYK.ORG_TEMP" from having duplicate rows for those columns. SQLSTATE=23505


惟一约束通过防止无意的复制有助于确保数据的完整性。本例中,它防止插入第二条指定 New York 为该组织某部门位置的记录。惟一约束是通过惟一索引来实施的。

约束名

如果您在创建约束时没有指定名称,DB2 将提供一个基于创建时间标记的名称。如:SQL031229211328410。

“头号人物!” - 主键约束

主键约束(primary key constraint)确保了表中构成主键的一列或一组列的所有值是惟一的。主键用于识别表中的特定行。每个表只能有一个主键,但可以有几个惟一键。主键约束是惟一约束的特例,它是通过主索引来实施的。

必须将主键约束中所引用的列定义为非空(NOT NULL)。可在 CREATE TABLE 语句中使用 PRIMARY KEY 子句( 图 1和 图 2)或者在如下的 altER TABLE 语句中定义主键约束。

清单 3. 创建主键约束。EMPLOYEE 表中的 EMPNO 列不能为空,并可在其上定义主键约束。

db2 alter table employee add primary key (empno)

您也可以使用 DB2 Control Center 来定义表上的主键约束( 图 5)。

图 5. Alter Table 窗口提供了一个方便方式来定义表上的主键约束。从 available columns 的列表中选择一个或多个列并单击按钮以将选中的列名移至 primary key columns 列表中。选中的列必须不可为空。

“都是相关的!” - 外键约束

外键约束(foreign key constraint)有时候称作参照约束。 参照完整性(referential integrity)被定义为“数据库的所有外键值都是有效的状态”。那外键又是什么呢? 外键(foreign key)是指表中的一列或一组列,其值必须至少匹配其父表中一行的一个主键或惟一键值。这真正意味着什么呢?它实际上并非如听起来那般复杂。简单来说,它意味着如果表(T2)中的一列(C2)存在值匹配另一个表(T1)中的一列(C1)的值, 并且 C1 是 T1 的主键

,那么 C2 就是 T2 中的外键列。将包含了父键(主键或惟一键)的表称为 父表(parent table),而将包含了外键的表称为 子表(dependent table)。让我们来考虑一个实例。

SAMPLE 数据库中的 PROJECT 表有一个称为 RESPEMP 的列。该列中的值表示负责该表中所列的每个项目的雇员编号。RESPEMP 是不能为空值的。因为该列对应了 EMPLOYEE 表中的 EMPNO 列,并且我们知道 EMPNO 是 EMPLOYEE 表的主键,RESPEMP 就可以定义为 PROJECT 表中的外键(清单 4)。这将确保今后对 EMPLOYEE 表进行的删除不会让 PROJECT 表包含“不存在的”项目负责雇员。

可在 CREATE TABLE 语句中使用 FOREIGN KEY 子句(图 1 和图 2)或者在如下的 altER TABLE 语句中定义外键约束。

清单 4. 创建外键约束。

db2 alter table project add foreign key (respemp) references employee on delete cascade

REFERENCES 子句指向此参照约束的父表。定义外键约束的语法包括 规则从句(rule-clause),在其中您可以从参照完整性角度告诉 DB2 如何处理 update 或 delete 操作( 图 1)。

将以标准方式处理 Insert 操作,您不能对其进行控制。参照约束的 插入规则(insert rule) 是指外键的插入值必须匹配其父表中的某个父键值。这是有道理的,并且与上述内容一致。如果向 PROJECT 表插入一条新记录,那么该记录必须包含对 EMPLOYEE 表中一个现有记录的引用(通过父-外键关系)。

参照约束的 更新规则(update rule) 是指 外键(foreign key)的更新值必须匹配其父表中的某个父键值,并且当完成 父键(parent key)上的 update 操作时,所有的外键值必须有匹配的父键值。总的来说,这意味着不能存在任何“孤儿”;每个子表必须有一个父表。


参照约束的 删除规则(delete rule) 是当从父表中删除一行时应用的,并且依赖于在定义参照约束时所指定的选项。如果指定了 RESTRICT 或 NO ACTION 子句,就不能删除任何一行。如果指定了 SET NULL 子句,则会将每个可为空的外键列设置为 null。然而,如果在创建参照约束时指定了 CASCADE 选项,那么 delete 操作将会被传播到父表的各子表上。因为已指定这些子表与父表是 删除关联的(delete-connected)。

下列实例说明了这些观点。

清单 5. 演示了外键约束中的更新规则和删除规则。

db2 update employee set empno = '350' where empno = '000190' DB20000I The SQL command completed successfully. db2 update employee set empno = '360' where empno = '000150' SQL0531N The parent key in a parent row of relationship "MELNYK.PROJECT.SQL040103212526610" cannot be updated. SQLSTATE=23504 db2 "select respemp from project where respemp < '000050' order by respemp" RESPEMP ------- 000010 000010 000020 000030 000030 db2 delete from employee where empno = '000010' DB20000I The SQL command completed successfully. db2 "select respemp from project where respemp < '000050' order by respemp" RESPEMP ------- 000020 000030 000030

父表(EMPLOYEE)中为“000190”的 EMPNO 值 可以被更改,因为子表(PROJECT)中不存在为“000190”的 RESPEMP 值。然而,对于为“000150”的

上一页  1 2 3 下一页
  • 上一篇教程: DB2 中的用户定义聚合函数
  • 下一篇教程: Informix Dynamic Server 中的 SQL 语句缓存
  •  

    关于本站 | 广告联系 | 版权声明 | 使用帮助

    Copyright © 2004-2008 www.egunao.com All rights reserved.