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/