表中有一个字段colum1,现在想添加另一个字段colum2,允许他为null。
然后加一个unique(colum1,colum2)的约束。这样就会产生duplicate keys found
的错误。
可我的程序往这个表里塞数据的时候,有的需要一个这样的约束,防止colum1,colum2重复。有的根本不往colum2中放数据。既可以让他为null。
不知道有什么好的解决方案。

解决方案 »

  1.   

    存在重复key的情况是因为,已经定义过了.
    单单在(c1,c2)上建立组合uk是不会出现什么问题.  把desc的描述拿出来看看.
      

  2.   

    哦 忘说了。表中已经存在上百万条数据了,其中colum1有重复数据。在这个基础上我添加colum2的。另外,colum1确实也作为另外的约束使用了。但是我试过,当colum1中没有重复数据时,这个unique(colum1,colum2)是能加进去的。
      

  3.   

    可以在触发器里面控制,如果发现插入的数据不符合你的约束,raise一个错误
      

  4.   

    非得跨越oracle的限制,这个是不可行的.
    除非可以舍弃重复的数据重新定义一下.
      

  5.   

    是啊,我也觉得这么搞不靠普。现在只有考虑去掉这个约束。在插入数据前用程序检索colum1 colum2这两个字段,判断有无重复的数据。
    但是我要插入的数据很多,数据库中数据更没数。即便是写个存储过程,这个速度也要命阿。
      

  6.   

    colum1中存在重复数据,colum2可以为null
    加unique(colum1,colum2),的时候不能保证(colum1,colum2)是唯一的了,这样就加不上了
      

  7.   

    是啊,我目前就是在有这个约束的情况下靠接收这个异常来判断的。
    我想他在抛出异常前,也要去检索这些数据,看有无重复的。那比起自己写select语句判断能快多少了呢?
      

  8.   

    myoldsaturn(saturn) 说得对。假设字段colum1有重复数据'001',在你添加字段colum2时,表中原来数据的colum2字段的值都是NULL,所以colum1='001',colum2=NULL的记录就会有重复,那么加unique(colum1,colum2)就必然失败。
      

  9.   

    看来只能舍弃colum1中重复的数据再添加你的约束了!