精华内容
下载资源
问答
  • ORA-00001: 违反唯一约束条件 这一个报错相信大家在插入数据时还是经常遇到的,尤其是在测试环境。 但是今天我在处理一个生产问题的时候再次遇到这个报错时有点奇怪: 1.该(记为A)的主键是数据库序列生成的,...

    ORA-00001: 违反唯一约束条件 这一个报错相信大家在插入数据时还是经常遇到的,尤其是在测试环境。
    但是今天我在处理一个生产问题的时候再次遇到这个报错时有点奇怪:
    在这里插入图片描述
    1.该表(记为表A)的主键是数据库序列生成的,不存在测试环境常见的因为插入测试数据导致后续通过数据库序列生成的主键冲突的问题
    2.检查了数据库表结构的约束,发现只有主键约束。在这里插入图片描述
    然后检查了插入数据的SQL,如下:

    MERGE INTO EIS_INSU_FILE_CABIN A
    USING (SELECT BUSI_ID, APPLY_ID, MD5_KEY, CAFILE_PATH, CAFILE_NAME
             FROM EIS_INSU_SIGN_INFO A
            WHERE A.SIGN_CATE = 31
              AND A.BUSI_ID = '5800'
              AND A.APPLY_ID = '5800'
              AND A.SIGN_STATUS IN (3, 4)) B
    ON (A.BUSI_ID = B.BUSI_ID AND A.APPLY_ID = B.APPLY_ID AND A.FILE_TYPE = 220)
    WHEN MATCHED THEN
      UPDATE
         SET A.FILE_PATH = B.CAFILE_PATH,
             A.FILE_NAME = B.CAFILE_NAME,
             A.MD5_KEY   = B.MD5_KEY
    WHEN NOT MATCHED THEN
      INSERT
        (FILE_ID,
         BUSI_CATE,
         BUSI_ID,
         APPLY_ID,
         FILE_TYPE,
         PAGE_NO,
         FILE_PATH,
         FILE_NAME,
         MD5_KEY)
      VALUES
        (SEIS_INSU_FILE_CABIN_ID.NEXTVAL,
         6,
         B.BUSI_ID,
         B.APPLY_ID,
         220,
         1,
         B.CAFILE_PATH,
         B.CAFILE_NAME,
         B.MD5_KEY);
    

    因为这个SQL还涉及到对MERGE INTO语法的理解,简单来说就是下面这个查询脚本的查询结果如果不为空就对查询结果进行更新,如果查询结果为空就进行插入,但是插入的条数实际是与B中的结果条数有关(此处为2条)

    SELECT A.*
      FROM EIS_INSU_FILE_CABIN A,
           (SELECT BUSI_ID, APPLY_ID, MD5_KEY, CAFILE_PATH, CAFILE_NAME
              FROM EIS_INSU_SIGN_INFO A
             WHERE A.SIGN_CATE = 31
               AND A.BUSI_ID = '5800'
               AND A.APPLY_ID = '5800'
               AND A.SIGN_STATUS IN (3, 4)) B
     WHERE A.BUSI_ID = B.BUSI_ID
       AND A.APPLY_ID = B.APPLY_ID
       AND A.FILE_TYPE = 220;
    

    尽管要插入两条数据,但从脚本可以看出,主键是序列生成的。对于这样的主键策略,如果有主键冲突的话,通常是查询到序列后,在应用程序中做了处理,然后再插入数据库中可能会存在问题。
    直接在数据库中进行insert应该是不会有这个问题的。

    再进一步排查,发现在索引上除了主键索引的类型是Unique之外,还有一个索引也是Unique(这个时候才发现日志其实已经提示很明确了,unique constraint (EINSU_MAIN.UNI_EIS_EIS_INSU_APP_FILE__BUSI2)violated 我还自以为是的以为是主键冲突)在这里插入图片描述
    以前我添加表约束中的唯一性约束都是通过类似下面这样的语句去添加,或者在建表的时候添加。

    ALTER TABLE table ADD CONSTRAINT uq_col UNIQUE(col);
    

    注:若唯一性约束涉及多列,则只能通过表级约束添加
    经百度,才知道除了有唯一约束还有唯一索引
    为对比二者的差别,做了一个简单的实验

    CREATE TABLE TEMP001(SID NUMBER(8, 0),
                         NAME VARCHAR2(10),
                         SEX CHAR(2),
                         BIRTHDAY DATE,
                         EMAIL VARCHAR2(20),
                         DEPID NUMBER(5, 0));
    
    
    ALTER TABLE TEMP001 ADD CONSTRAINT TEMP001_UQ UNIQUE(SID);
    CREATE UNIQUE INDEX UNI_IDX_EMAIL ON TEMP001(EMAIL);
    

    在这里插入图片描述
    在这里插入图片描述
    可以看出,建立唯一约束后默认会建立一个同名的唯一索引,也就是唯一约束实际是通过唯一索引实现的。
    禁用唯一约束ALTER TABLE TEMP001 DISABLE CONSTRAINT TEMP001_UQ;后:在这里插入图片描述
    在这里插入图片描述
    可以看出禁用唯一约束后唯一索引被删除了。
    其他在满足列值唯一的效果上没有什么区别

    展开全文
  • 遇到这种情况,要根据控制台的报错,找到相对应的,去看看索引,因为索引里面放着的是唯一性约束条件,根据这个里面给出的条件,去缩小检查的范围。(也因为数据库中的数据特别多,一千多条,不好排查数据,今天把...

    控制台报错后无思路,一开始以为是控制台给出的sql语句的问题。对自己的测试数据太过于自信,觉得不会是数据问题,其实就是数据问题,数据重复了。遇到这种情况,要根据控制台的报错,找到相对应的表,去看看索引,因为索引里面放着的是唯一性约束条件,根据这个里面给出的条件,去缩小检查的范围。(也因为数据库中的数据特别多,一千多条,不好排查数据,今天把数据全部删除,只保留一条数据,就导入成功了,另外,删除数据的时候可能在navcat中依靠工具删除当时很顺利,但是刷新会发现数据仍然存在,这个时候要使用sql语句删除。)

     

    展开全文
  • 1、查看数据是否重复迁移,导致无法创建唯一索引; 2、该唯一索引在Oracle上可以创建但是在达梦上不可以,经过对比数据,发现有两行一模一样的数据,一个只是比另一个字符后多了空格,比如:"A "与“A”。oracle默认...

    1、查看数据是否重复迁移,导致无法创建唯一索引;
    2、该唯一索引在Oracle上可以创建但是在达梦上不可以,经过对比数据,发现有两行一模一样的数据,一个只是比另一个字符后多了空格,比如:"A "与“A”。oracle默认是会识别到字符结尾的空格,达梦默认会截断字符结尾的空格。
    解决该报错的方法为,初始化实例的时候图形化勾选“空格填充”,命令行添加BLANK_PAD_MODE=1。

    展开全文
  • 在做一个移植的时候报错,违反唯一性约束,检查结构发现只有主键才有唯一性约束,但是结构是从oracle直接移植过来到达梦数据库上面的,主键不会出现相同的值,怎么会报错违反唯一性约束呢?检查数据发现是主键...

    在做一个移植的时候报错,违反唯一性约束,检查表结构发现只有主键才有唯一性约束,但是表结构是从oracle直接移植过来到达梦数据库上面的,主键不会出现相同的值,怎么会报错违反唯一性约束呢?检查数据发现是主键字段数据末尾含有空格导致的。

    比如在oracle新建一个test表,字段C1作为主键 ,如下:
    在这里插入图片描述
    插入数据时可以这样写:

    INSERT INTO TEST VALUES('A','1')
    INSERT INTO TEST VALUES('A ','1')
    INSERT INTO TEST VALUES(' A','1')
    

    在这里插入图片描述
    这样都能顺利插入表中而不违反主键的约束,但是达梦数据库默认会去掉数据末尾的空格,违反唯一约束性。

    解决办法:
    修改dm.ini配置文件设置BLANK_PAD_MODE=1即可兼容这一问题。

    展开全文
  • 今天在触发一个业务场景的时候,发现发出的报文无法入库,查看日志发现当数据插入时,报了违反唯一性约束的问题,但是明明之前操作是没有问题的,追溯两次执行过程中的变化,发现有人手动给那张表insert了200多万...
  • oracle数据迁移到达梦数据库,出现违反唯一约束的问题 解决办法: 1.先在达梦数据库上重新编辑建表语句 右键出现问题的-生成sql脚本-Create to - 当前SQL编辑器 - 删掉多余的部分,删除完先不要执行 2.删掉...
  • 一个非常奇怪的违反唯一性约束的问题:我在一个中用下面的语句进行update时报违反唯一性约束的错误,如下update yield.at_lotcalendar set enddate=to_date('24-12-2006 23:59:59','DD-MM-YYYY HH24:MI:SS') where...
  • 最近,在做一个移植的时候经常会报错,违反唯一性约束,检查结构发现只有主键才有唯一性约束,但是结构是从oracle直接移植过来到达梦数据库上面的,主键不会出现相同的值,怎么会报错违反唯一性约束呢?...
  • SQL错误:违反唯一约束条件

    万次阅读 2019-07-10 19:47:37
    java.sql.BatchUpdateException: ORA-00001: 违反唯一约束条件 (AML.PK_LTB_INS_RPOL) at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:12296) at oracle.jdbc.driver....
  • 猿们好,我是honery,今天来给大家唠一唠...实际的使用中,尤其高并发场景下,很容易出现插入同一条记录的情况,该情况下数据库会报违反唯一性约束的错误。总不能让数据库一直抛这个错误吧。于是我们想到可以在业...
  • 数据库违反唯一约束错误

    千次阅读 2018-01-03 14:39:35
    org.springframework.dao.DuplicateKeyException:  ... Cause: java.sql.SQLIntegrityConstraintViolationException: ORA-00001: 违反唯一约束条件 (HISTEST.idx_treatment_card_no)找到那个字段违反约束
  • 第三步出现报错 ORA-00001: 违反唯一约束条件 原主键: alter table TF_F_FEEPOLICY_SEND add constraint PK_TF_F_FEEPOLICY_SEND primary key (PRESENT_INS_ID, PARTITION_ID) 大神帮忙分析下是...
  • select cu.* from user_cons_columns cu, user_constraints au where cu.constraint_name = au.constraint_name and au.constraint_type = 'P' and au.constraint_... 程序报违反唯一性约束错误时可以通过以上语...
  • 违反唯一性约束条件 1.第一步在数据库的客户端查找报错的唯一性约束条件 select * from dba_constraints t where t.constraint_name='SYS_C0013393' 2.删除对应的约束条件 alter table SOCIAL_MANAGER_ID_...
  • 我正在运行一个存储过程,它选择值我的临时并将它们插入到数据库中,如下所示:INSERT INTO emails (EmailAddress) (SELECTDISTINCT eit.EmailAddressFROM #EmailInfoTemp eitLEFT JOIN emails eaON eit.Email...
  • 我通过以下方法在MySQL数据库中创建了一个:CREATE TABLE `newsubscriptions_orderspecification` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,`display_name` varchar(256) NOT NULL,`sub_def_id` ...
  • 违反唯一约束

    千次阅读 2011-10-31 20:29:24
    今天执行SQL语句的时候,遇到了“违反唯一约束”的错误,找了半天,才发现问题所在。 通常遇到这个问题是在执行的插入的时候遇到的。  建表语句如下: CREATE TABLE dbo.scheduletable (  scheduleid ...
  • /+IGNORE_ROW_ON_DUPKEY_INDEX(rtoc_rtdata_interrupt_config(rtdata_point_name))P/
  • 今天在写了一个行级update触发器,对表进行插入的时,触发触发器对扩展做插入操作。遇到的问题不是一般的多。 1)在触发器的匿名块部分中用了 insert into tab_a(col_a1) select col_b1 from tab_b where col_b1= ...
  • Oracle insert 数据报错违反唯一约束性

    千次阅读 2019-01-04 10:13:20
    1,由于业务需求,取消了系统 test  user 字段 name 的唯一约束性(name 的唯一约束名称是USER_NAME)。 提供的执行SQL如下: alter table 系统名.表名 drop constraint 字段唯一约束性对应的名称; //按我司...
  • 违反唯一条件约束

    2020-03-13 10:08:31
    今天遇到了一个问题,违反唯一条件约束,根据后台报错信息找到库.,然后根据对应插入的数据(一般是根据对应中主键插入)查找是否有这条数据,有的话说明这条数据已经存在,然后可以删除这条数据,在做一次数据...
  • --此处需要去查看中id最大值,由于我的中有25条数据,所以从26开始。 start with 26 nomaxvalue nocycle cache 10; 然后继续插入数据就没有问题了。 可以推理出一个问题---创建序列应该最好在创建之后,...
  • oracle数据库,pl/sql工具,最近在用update语句批量更新时,发现更新报错,提示"违反唯一约束条件",如何找到更新出错的数据呢?此处做个记录: update语句为: update wmwhse2.lotattribute t1 set t1.lottable02=...
  • oracle违反唯一约束

    千次阅读 2018-11-20 15:55:44
    报错信息:nested exception is org.hibernate.exception....背景:修改原有的逻辑,取消掉某个字段的唯一约束。 框架:spring-data-jpa 1,查询所有的约束 select * from user_constraints 2,根...
  • 今天有个同事问我,为什么从生产数据库导出来的不能导入到他的本地数据库,而且导入的时候报如下的错误 oracle imp遇到违反唯一约束条件 (GZW.SYS_C006112),不仅如此导入的进程一直继续, 我发现他的工具中 ...
  • 测试1,先创建唯一性约束条件,再禁用唯一性检查(如图):![图片说明](https://img-ask.csdn.net/upload/201603/07/1457317726_868341.png) 测试2,先创建唯一性索引,再禁用唯一性检查(如图):![图片说明]...
  • 然后打开网页看了一下报错,上面说的是违反唯一约束,我就没有搞懂了呀!前几天还好好的今天插入为什么就违反唯一约束了呢!在百思不得其解的情况下舔着脸皮去百度了一下(向我这么优秀的人才居然还要去百度。。。。...
  • 初次向中插入数据时候不会报错,再次执行时会报错违反唯一约束,因为序列每次是从1开始的,再次插入数据时候数据中已经有数据了,还从1开始就会报错。 解决方案:从数据中已有数据的行数开始自增 ...
  • 这周某系统上线,有一个需求就是,为一张修改唯一性约束,原因就是之前发现,由于唯一性约束设置不当,导致业务处理出现异常。举例来说,如下测试,原先唯一性约束是a和b俩字段,但发现实际业务中,a和b的组合是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,788
精华内容 7,915
关键字:

违反表唯一性约束