ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 组合约束,自我错误理解纠正一则

组合约束,自我错误理解纠正一则

原创 Linux操作系统 作者:feilo4r 时间:2010-07-06 23:51:39 0 删除 编辑
        我的错,不求甚解惹的祸。今晚上线,一个SQL脚本,本来是很常见的一个ORA-00001违反唯一性约束的错误。结果让我自己解释来解释去,解释个错的,糗大了。

        语句是这样的:

insert into schema.t_list_member
  (id, list_id, code, status, create_date)
  (select schema.seq_t_list_member_id.Nextval, 481, r.code, 1, sysdate
     from schema.list r
    where r.type1 = 7
      and r.type2 = 1);

        ORA-00001: unique constraint (FUNDOUT.T_LIST_MEMBER_UK) violated

        提示很明显的支出,是T_LIST_MEMBER_UK这个约束导致的,去查了一下,是个list_id, mem_code的组合约束。

        一看list_id给的是个固定值481,也没仔细多想就给人解释,是因为该字段引起的。其实根本不是这么回事,组合约束是要2个字段同时有相同的值才,即出现2次481,00201时才会报错,而481,00201和481,00202是不会报错的。

        而这次出现错误的原因也当然是因为code这个字段有重复值,distinct一下就不会出现了。修改以后的语句:

insert into schema.t_list_member
  (id, list_id, code, status, create_date)
  (select schema.seq_t_list_member_id.Nextval, 481, code, 1, sysdate
     from (select distinct code From schema.list where type1 = 7
      and type2 = 1));

        毕业以后就直接做的DBA,一直是做运维,反而基础SQL语句方面的知识倒是薄弱的很,以前自己对SQL方面的要求也就是看看懂就行了,以为不是什么大不了的东西。今天记下这些,鄙视一下自己的不求甚解。经验是点点滴滴的汇集,不能放过哪怕是最不起眼的一小点。

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

下一篇: ORA-29701
请登录后发表评论 登录
全部评论

注册时间:2008-09-19

  • 博文量
    33
  • 访问量
    97928