DB2 键约束操作
今天遇到一个问题,想要删掉一个表中的某列的唯一约束,google了一下,搜出来许许多多,找到能用的,记下来总结如下。
命令如下
select constname, tabname, colname, colseq from syscat.keycoluse where TABNAME='TableName'
ALTER TABLE DB2ADMIN.BM_SERVERS DROP UNIQUE <constname>;
第一行查找出列对应的constname,第二行呢就将它从表中删除。
先记录下相关的一些可能用到的命令及表【转载】
| 目录视图 | 视图列 | 描述 | 查询实例 |
| 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" |
更多请查看 http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0401melnyk/
DB2 官方文档:http://www-01.ibm.com/support/knowledgecenter/SSEPGG_9.7.0/com.ibm.db2.luw.kc.doc/welcome.html?lang=zh
知其然,知其所以然,那么下面就要讨论下这些都是神马啊?当然也是从以上文档中总结出来滴
DB2有五种约束:
NOT NULL 约束是这样一种规则,它防止在表的一列或多列中输入空值。
唯一约束(也称为唯一键约束)是这样一种规则,它禁止表的一列或多列中出现重复值。唯一键和主键是受支持的唯一约束。例如,可对供应商表中的供应商标识定义唯一约束以确保不会对两个供应商指定同一供应商标识。
主键约束是与唯一约束具有相同属性的一列或列的组合。可使用主键和外键约束来定义表之间的关系。
外键约束(也称为引用约束或引用完整性约束)是关于一个或多个表中的一列或多列中的值的一种逻辑规则。例如,一组表共享关于公司的供应商的信息。供应商的名称有时可能会更改。可定义一个引用约束,声明表中的供应商的标识必须与供应商信息中的供应商标识相匹配。此约束会阻止可能导致丢失供应商信息的插入、更新或删除操作。
(表)检查约束(也称为检查约束)对添加至特定表的数据设置限制。例如,表检查约束可确保每当在包含个人信息的表中添加或更新薪水数据时,职员的薪水级别至少为 $20000。
创建 Not null:
CREATE TABLE EMPLOYEES (. . .
EMERGENCY_PHONE CHAR(14) NOT NULL,
. . .
);
修改之:
db2 "alter table tabname ALTER colname drop not null"
db2 "alter table t01 ALTER colname set not null"
创建、删除唯一约束:
db2 "alter table tabname add unique(colname)"
db2 "alter table tabname drop unique CONSTNAME "
创建主键约束:
db2 "alter table staff add primary key (id)"
创建外键约束:
db2 alter table project add foreign key (respemp) references employee on delete cascade
表检查约束:
db2 alter table employee add constraint phoneno_length check (length(rtrim(phoneno)) = 4)
DB2 键约束操作的更多相关文章
- db2 将原表列notnull属性修改为null属性的方法 (查看主键约束,唯一约束去syscat.tabconst)
好久没机会写点东西了,今天把自己遇到的一个小问题跟大家分享一下如何修改db2数据库表中列的属性--将列的非空属性改为允许空的属性,修改数据表的某一列属性其实很简单但是里面有需要细节需要dba注意,毕竟 ...
- MYSQL外键约束的参照操作
如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表.外键是用来实现参照完整性的,不同的外键约束方式将可以使两张表紧密的结合起来,特别是修改或者删除的级联操作将使得日常 ...
- MySQL的外键约束:Cascade/Restrict/No action/SET NULL :级联操作
转自:http://blog.csdn.net/cnjsnt_s/article/details/5548280 具体使用时需要参考:http://blog.csdn.net/codeforme/ar ...
- 【转】SQL Server 创建约束图解 唯一 主键-界面操作
SQL Server 创建约束图解 唯一 主键-界面操作 SQLServer中有五种约束,Primary Key约束.Foreign Key约束.Unique约束.Default约束和Check约束, ...
- mysql数据库:分表、多表关联、外键约束、级联操作
一.分表.外键.级联.多对一 二.多对多 三.一对一 一.分表.外键.级联.多对一 将部门数据与员工数据放到同一张表中会造成 数据重复 结构混乱 扩展维护性差 需要分表 create table de ...
- db2数据库创建删除主键约束和创建删除唯一键约束
创建.删除唯一约束: db2 "alter table tabname add unique(colname)" db2 "alter table tabname dro ...
- sql操作数据库(3)-->外键约束、数据库表之间的关系、三大范式、多表查询、事务
外键约束 在新表中添加外键约束语法: constraint 外键约束名称 foreign key(外键的字段名称) references 主表表名(主键字段名) 在已有表中添加外键约束:alter t ...
- MySQL8.0数据库出现的问题——外码创建方式、外键约束两个引用列不兼容问题、check约束问题、用触发器代替check约束、关键字DELIMITER、删除添加索引、删除添加外键约束、和一些数据库方面的操作
一.首先先说一下我们都需要建立那些表 mysql> CREATE TABLE IF NOT EXISTS `student`( -> `sno` CHAR(8) NOT NULL, -&g ...
- Constraint6:更新外键约束(Foreign Key Constraint)的引用列
在SQL Server中,表之间存在引用关系,引用关系通过创建外键约束(Foreign Key Constraint)实现.如果一个Table中的column被其他Table引用,那么该表是参考表,或 ...
随机推荐
- 基于MNIST数据集使用TensorFlow训练一个没有隐含层的浅层神经网络
基础 在参考①中我们详细介绍了没有隐含层的神经网络结构,该神经网络只有输入层和输出层,并且输入层和输出层是通过全连接方式进行连接的.具体结构如下: 我们用此网络结构基于MNIST数据集(参考②)进行训 ...
- [UE4]Native Widget Host
一.Native Widget Host是一个容器,它可以包含一个Slate UI 二.Native Widget Host应该用在当你需要把一个Slate UI 放到UMG中的时候,只有这个时候才需 ...
- python导入requests库一直报错原因总结 (文件名与库名冲突)
花了好长时间一直在搞这个 源代码: 一直报如下错误: 分析原因: 总以为没有导入requests库,一直在网上搜索各种的导入库方法(下载第三方的requests库,用各种命令工具安装),还是报错 后来 ...
- IntelliJ IDEA 调试技巧
程序员的工作内容,有不少的时间是用在调试代码上.可以说不是在调试代码,就是即将调试代码. 掌握调试代码的一些技巧,在使用IDE提供的debugger时会快速定位问题的方式. 1.多线程调试 在多线程应 ...
- Xeon Phi 《协处理器高性能编程指南》随书代码整理 part 2
▶ 第四章,逐步优化了一个三维卷积计算的过程 ● 基准代码 #include <stdio.h> #include <stdlib.h> #include <string ...
- python 正则表达式 RE模块汇总记录
re.compile(pattern, flags=0) re.search(pattern, string, flags=0) re.match(pattern, string, flags=0) ...
- Selenium IDE录制脚本时弹出窗口的完美处理
很多朋友录制脚本时新打开弹出窗口后无法定位元素,我也遇到同样的问题,国内没有什么好的资料,于是就阅读英文,不断尝试,感觉那个selectWindow(title)什么就是个坑,我用这种方法成功处理后得 ...
- python——位运算之进制转化
>>> a=0b001100 >>> a 12 >>> b=0o001100 >>> b 576 >>> c= ...
- python——vs2017安装python库时,提示pip指令问题。
需要跟新pip指令 方法: 第一步:打开vs2017 后新建一个python 文件 后面如图 点击红色部分 2.在框中输入pip之后更新即可 如图 3.问题解决 倘若还有问题 欢迎分享
- java判断是否是数字
1.用JAVA自带的函数 public static boolean isNumeric(String str){ for (int i = 0; i < str.length(); i++){ ...