自己整理的学习资料——DB2 V8数据库基础(二十六)

5       约束

约束被 DB2 Universal Database(TM)DB2 UDB)用来对数据实施业务规则。

  • 非空(NOT NULL
  • 惟一
  • 主键
  • 外键
  • 表检查

此外,还有另一种名为 信息约束(informational constraint的约束。与上面所列的这五种约束类型不同的是,信息约束不是由数据库管理器实施的,但是 SQL 编译器可用它来提高查询性能。

您可以在创建一个新表时定义一个或多个 DB2 UDB 约束,也可以稍后通过更改表来定义它们。CREATE TABLE 语句是十分复杂的;所以尽管实际上其选项中只有一小部分是用于定义约束的,但是当在语法图中进行查看时,那些选项本身看上去就相当复杂。通过 DB2 Control Center 可使约束管理更简单、方便。

 

 

5.1    唯一约束

唯一约束包括主键和唯一键2种。用unique关键字,不准许列中有空值。创建唯一约束系统会自动创建唯一索引。

 

create table test1(id varchar(10) not null primary key ,name varchar(10) not null unique )

 

alter table test1 add constraint a1 unique(name)   //要求name是非空列

 

唯一索引则不同:不要求列非空,只要列值唯一即可。

create unique index  a1 on test2(name)

 

唯一约束不能为空,唯一索引可以为空。

5.2    引用约束(就是外键约束)

外键的值必须是父键的一部分或者为NULL

插入规则

  • 外键的插入值必须匹配其父表中的某个父键值,也就是没有找到父项时取消插入

         删除规则:

  • Restrict(限制)︰如果有从行就不能删除父行。
  • Cascade(级联)︰删除父表中的行会自动删除从表中的任何相关行。
  • No Action(无动作)︰这是默认的情况,如果有从行就不能删除父行。和restrict的区别在于何时执行约束。
  • Set Null(置空)︰该规则确保在父表删除一行时,讲从表的外键置空(如果允许空的话),行的其它列保持不变。

         更新規則︰

Restrict

No Action

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

5.3    表检查约束

表检查约束(table check constraint对将要添加到表中的数据实施已定义的限制。例如,一个表检查约束可确保每当在 EMPLOYEE 表中添加或更新电话分机时,雇员的电话分机号码都正好为四位数字。可在 CREATE TABLE 语句中使用 CHECK 子句或者在如下的 ALTER TABLE 语句中定义表检查约束。

创建表检查约束。PHONENO_LENGTH 约束确保向 EMPLOYEE 表添加的电话分机正好为四位数字。

db2 alter table employee

        add constraint phoneno_length check (length(rtrim(phoneno)) = 4)

如果表中的现有行包含违反新约束的值,您就不能创建此表检查约束(图 8)。在适当更新了那些不兼容的值之后,您就可以成功添加或修改此约束了。

5.3.1   将表置于检查挂起状态

使用 SET INTEGRITY 语句可以打开或者关闭表检查约束。这将非常有用,例如,当在给表加载大型数据的期间优化性能时。

把表调整为没有检查数据的在线状态

SET   INTEGRITY  FOR  TABLE_NAME  ALL   IMMEDIATE   UNCHECKED

 

注释:见《SQL Reference Volume 2

 

 


 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9524210/viewspace-481945/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/9524210/viewspace-481945/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值