如何在达梦中找出特定表的约束条件

在某些特定场景下,我们需要找到某张特定表的主键,或者是其它约束信息。而在对于需要查找的表不熟悉的情况下,我们需要利用系统视图进行查找。在DM8中,我们找某张表的约束条件需要用到的关于约束的视图有all_constraints和all_cons_columns。

all_constraints中包含有当前用户拥有的所有约束信息,其中有约束的拥有者,约束名,约束类型,约束所在的表名或者视图名,但是没有约束所在具体字段的信息。

这一部分信息,我们可以在系统视图all_cons_columns中查找到。在all_cons_columns中,约束名,约束所在的表名和约束所在的列名包含在内,我们可以通过连接查询,找到需要查找的特定表的主键约束所在的列名。连接的列为CONSTRAINT_NAME,即约束名,在约束被创建的时候可以指定约束名,如果没有指定约束名,则会自动生成一个“CONS”加上一串数字的约束名,对于不同的约束其约束名是唯一的。

两个视图的连接查询可以获取特定表的特定列上的约束条件,一共有5种约束类型的值:C代表检查约束,P代表主键约束,U代表唯一约束,R代表引用约束即外键,V代表视图上的检查约束。需要找到某个表主键约束,可以限定where子句中的条件为CONSTRAINT_TYPE=’P’即可直接筛选出主键所在的列。假设我们需要找到DMHR示例库中EMPLOYEE表的主键所在列,查找方式如下:

从查询结果看可以发现DMHR下EMPLOYEE表的主键为EMPLOYEE_ID列。其它表的约束信息也可以用同样的方式进行查找。例如在all_constraints中还有关于引用约束的信息,我们可以利用此信息找到引用约束的引用到的对应拥有者、表名、列名的信息。示例如下:

通过查询我们可以发现EMPLOYEE表中DEPARTMENT_ID列的引用约束引用的是DEPARTMENT表中的DEPARTMENT_ID列,而JOB_ID列的引用约束引用的是JOB表中的JOB_ID列。这样我们就可以查找出表中所有外键所引用的列了。

通过all_constraints视图我们还可以查找出表中所有的检查约束,利用SEARCH_CONDITION字段即可查出表中所有的检查约束。

    

这里列举的是最为常见的几种情况,遇到的实际问题中可能还需要了解约束的其它方面,例如是否延迟生效,是否数据都符合约束规则,约束是否是无效的,想要找出有关约束与列的其它相关信息可以参考相关手册与文档。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

保定公民

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值