当前位置:网站首页 >> 时尚

使用DB2对象创建约束

时间:2019-06-20 04:43:48 来源:互联网 阅读:0次

  约束使 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 —— 修改表

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

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

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

  CONNECT TO HWLD;

  CREATE TABLE DULE

  ( 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 —— 创建表

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

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

  表 RTICIPANT 应该具有以下的表定义:

  (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 之间 RTICIPANT 中的 MODULE_ID 应该引用 DULE 中的 MODULE_ID。当从表 DULE 中删除一个模块时,将 PARTICIPANT 表中对应的 MODULE_ID 设置为 NULL,所以 NULL 值在这里不会是无效的 MODULE_ID 值。 当在 RTICIPANT 表中插入一行时,如果它的 MODULE_ID 在 DULE 中不存在,那么插入失败。 当更新表 DULE 中的一个模块时,如果 RTICIPANT 表中存在着引用这个 MODULE_ID 的记录,那么更新失败。  8、添加以下约束来实施前面的条件:

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

  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 向导 —— 列

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

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

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

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

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

  图5. 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 中。

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

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

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

  查看本文来源

汉森四磨汤怎么服用
什么食物可治疗便秘
如何治疗厌食症症状

相关文章

一周热门

热点排行

热门精选

友情链接: 阿克苏有哪些肾病内科医院 阿克苏有哪些消化内科医院 山西有哪些三甲医院 山西有哪些一丙医院 潮州有哪些一丙医院 云浮有哪些三甲医院 徐州有哪些二级医院 徐州有哪些一乙医院 连云港有哪些三甲医院 淮安有哪些三乙医院 盐城有哪些三甲医院 温州有哪些二丙医院 嘉兴有哪些二乙医院 洛阳有哪些一级医院 洛阳有哪些一丙医院 株洲有哪些三丙医院 邵阳有哪些二级医院 武汉有哪些医院 黄石有哪些医院 合肥其他医院哪家好 河南全科医院哪家好 四川计划生育科医院哪家好 四川普外科医院哪家好 四川其他外科医院哪家好 四川小儿眼科医院哪家好 四川干部诊疗科医院哪家好 河北小儿眼科医院哪家好 河北中医老年病科医院哪家好 湖南传染病科医院哪家好 湖南营养科医院哪家好 咸宁有哪些产科医院 咸宁有哪些免疫科医院 台州感染内科医院哪家好 台州老年病科医院哪家好 咸宁有哪些理疗科医院 台州青光眼医院哪家好 咸宁有哪些中医心内科医院 台州特色医疗科医院哪家好 台州肝病科医院哪家好 咸宁有哪些肝炎医院 随州有哪些传染病科医院 随州有哪些遗传咨询科医院 丽水肝胆外科医院哪家好 丽水中医肿瘤科医院哪家好 随州有哪些中医神经内科医院 丽水中医外科医院哪家好 丽水中医神经内科医院哪家好 丽水中医免疫内科医院哪家好 随州有哪些干部诊疗科医院 丽水中医肝病科医院哪家好 丽水中医乳腺外科医院哪家好 随州有哪些疼痛科医院 随州有哪些精神科医院 恩施有哪些肝病科医院 丽水法四医院哪家好 恩施有哪些小儿眼科医院 恩施有哪些神经外科医院 南阳有哪些心血管外科医院 攀枝花有哪些民族医学科医院 遂宁五官科医院哪家好 内江肿瘤综合科医院哪家好 凉山有哪些小儿泌尿科医院 凉山有哪些超声科医院 唐山有哪些小儿神经内科医院 唐山有哪些小儿感染科医院 唐山有哪些牙周科医院 南充小儿内科医院哪家好 唐山有哪些康复科医院 南充血管外科医院哪家好 眉山小儿急诊科医院哪家好 邢台有哪些麻醉医学科医院 邢台有哪些急诊科医院 广安口腔粘膜科医院哪家好 邢台有哪些小儿急诊科医院 广安青光眼医院哪家好 邢台有哪些小儿感染科医院 达州口腔科医院哪家好 邢台有哪些小儿眼科医院 达州特色医疗科医院哪家好 达州医疗美容科医院哪家好 保定有哪些肿瘤内科医院 承德有哪些中医免疫内科医院 阿坝干部诊疗科医院哪家好 承德有哪些药物依赖科医院 承德有哪些双相障碍科医院 阿坝精神科医院哪家好 阿坝房缺医院哪家好 甘孜肝病科医院哪家好 甘孜骨外科医院哪家好 沧州有哪些口腔科医院 甘孜全科医院哪家好 廊坊有哪些整形科医院 甘孜心脏科医院哪家好 凉山老年病科医院哪家好 凉山小儿呼吸科医院哪家好 廊坊有哪些牙体牙髓科医院 宣城有哪些小儿内分泌科医院 宣城有哪些功能神经外科医院 宣城有哪些脑外科医院 马鞍山胸外科医院哪家好
媒体合作:

Copyright (c) 2011 八零CMS 版权所有 备案号:苏ICP备17012668号-1

网站地图