DB2数据库添加删除约束项

前言

在DB2数据库操作的过程中,存在对现有表格的操作,但其中有一点需要特别说明的就是,对约束项的操作不是直接对某一列,而是对约束项编号进行操作。

数据库中约束项

DB2有五种约束:

  • NOT NULL:约束是这样一种规则,它防止在表的一列或多列中输入空值。

  • UNIQUE:唯一约束(也称为唯一键约束)是这样一种规则,它禁止表的一列或多列中出现重复值。唯一键和主键是受支持的唯一约束。例如,可对供应商表中的供应商标识定义唯一约束以确保不会对两个供应商指定同一供应商标识。

  • PRIMARY KEY:主键约束是与唯一约束具有相同属性的一列或列的组合。可使用主键和外键约束来定义表之间的关系。

  • FOREIGN KEY:外键约束(也称为引用约束或引用完整性约束)是关于一个或多个表中的一列或多列中的值的一种逻辑规则。例如,一组表共享关于公司的供应商的信息。供应商的名称有时可能会更改。可定义一个引用约束,声明表中的供应商的标识必须与供应商信息中的供应商标识相匹配。此约束会阻止可能导致丢失供应商信息的插入、更新或删除操作。

  • CHECK:(表)检查约束(也称为检查约束)对添加至特定表的数据设置限制。例如,表检查约束可确保每一条数据都小于等于3。

查询约束项

此时需要注意,约束项的删除不是对某列来操作,而是对某张表的约束名来进行操作。所以此时需要通过查询语句查询出目标表的所有约束项后,对想要删除的约束项进行操作。
查询相关操作手册:

目录视图 视图列 描述 查询实例
SYSCAT.CHECKS 为每个表检查约束包含一行记录 db2 select constname, tabname, text from syscat.checks
SYSCAT.COLCHECKS 为表检查约束所引用的每一列包含一行记录 db2 select constname, tabname, colname, usage from syscat.colchecks
SYSCAT.COLUMNS NULLS 指明一列是可为空(Y)还是不可为空(N) db2 select tabname, colname, nulls from syscat.columns where tabschema = ‘MELNYK’ and nulls = ‘N’
SYSCAT.CONSTDEP 为某些其他对象上的约束的每个依赖性包含一行记录 db2 select constname, tabname, btype, bname from syscat.constdep
SYSCAT.INDEXES 为每个索引包含一行记录 db2 select tabname, uniquerule, made_unique, system_required from syscat.indexes where tabschema = ‘MELNYK’
SYSCAT.KEYCOLUSE 为惟一、主键或外键约束定义的键中所包含的每个列包含一行记录 db2 select constname, tabname, colname, colseq from syscat.keycoluse
SYSCAT.REFERENCES 为每个参照约束包含一行记录 db2 select constname, tabname, refkeyname, reftabname, colcount, deleterule, updaterule from syscat.references
SYSCAT.TABCONST 为每个惟一(U)、主键(P)、外键(F)或表检查(K)约束包含一行记录 db2 select constname, tabname, type from syscat.tabconst
SYSCAT.TABLES PARENTS 该表的父表数目(该表在其中充当子表的参照约束数目) db2 “select tabname, parents from syscat.tables where parents > 0”
SYSCAT.TABLES CHILDREN 该表的子表数目(该表在其中充当父表的参照约束数目) db2 “select tabname, children from syscat.tables where children > 0”
SYSCAT.TABLES SELFREFS 该表的自引用参照约束数目(该表在其中既充当父表又充当子表的参照约束数目) db2 “select tabname, selfrefs from syscat.tables where selfrefs > 0”
SYSCAT.TABLES KEYUNIQUE 在该表上所定义的惟一约束(除了主键)的数目 db2 “select tabname, keyunique from syscat.tables where keyunique > 0”
SYSCAT.TABLES CHECKCOUNT 在该表上所定义的检查约束的数目 db2 “select tabname, checkcount from syscat.tables where checkcount > 0”

通过上述描述可知,通过syscat.keycoluse表可以查询出所需约束项。

select constname, tabname, colname, colseq from syscat.keycoluse where TABNAME='TableName'

其中tabname为要操作的表名。
查询结果类似于下图:
在这里插入图片描述
此时根据列名对应上约束项之后,就可以进行删除操作了:

//删除唯一约束项
ALTER TABLE <tablename> DROP UNIQUE <constname>;

对五中约束项的操作方式:

//创建 Not null:

CREATE TABLE <tablename> (. . .
<constname> CHAR(14) NOT NULL,
. . .
);

修改操作:

alter table <tablename> ALTER <colname> drop not null;
alter table <tablename> ALTER <colname> set not null;

创建、删除唯一约束:

alter table <tablename> add unique(<colname>);

alter table <tablename> drop unique <CONSTNAME> ;

创建主键约束:

alter table <tablename> add primary key (<colname>);

创建外键约束:

alter table <tablename> add foreign key (<colname>) references b表<tablename>(b表<colname>);

表检查约束:

alter table employee add constraint phoneno_length check (length <= 3);

以上,就是数据库约束的所有操作方式。

猜你喜欢

转载自blog.csdn.net/jerrygaoling/article/details/107412246