• Oracle报错:ORA-02292: 违反完整约束条件 - 已找到子记录问题解决


    目录

    一、问题详情

    二、原因分析

    三、解决方案


    一、问题详情

    使用Mybatis删除数据的时候,报了如下错误详情:

    org.springframework.dao.DataIntegrityViolationException: 
    ### Error updating database.  Cause: java.sql.SQLException: ORA-02292: 违反完整约束条件 (TEST.FK_TEST_FUE) - 已找到子记录

    ### The error may exist in com/example/project/test/mapper/TestMapper.java (best guess)
    ### The error may involve defaultParameterMap
    ### The error occurred while setting parameters
    ### SQL: DELETE FROM test WHERE id IN (     ?    )
    ### Cause: java.sql.SQLException: ORA-02292: 违反完整约束条件 (TEST.FK_TEST_FUE) - 已找到子记录

    ; ORA-02292: 违反完整约束条件 (TEST.FK_TEST_FUE) - 已找到子记录
    ; nested exception is java.sql.SQLException: ORA-02292: 违反完整约束条件 (TEST.FK_TEST_FUE) - 已找到子记录

       at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:251)
       at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:70)
       at 

    二、原因分析

    这个错误是因为在删除数据时,被删除的数据行存在其他表的外键约束关联,即已存在子记录。在数据库设计中,外键约束(FK_TEST_FUE)要求在删除父表数据之前先删除所有相关的子表数据,否则会触发这个异常。

    三、解决方案

    先删除外键约束所在的表数据,再删除主表数据就解决了,可以先根据以下SQL查询:

    1. SELECT
    2. a.constraint_name,
    3. a.table_name,
    4. b.constraint_name
    5. FROM
    6. user_constraints a,
    7. user_constraints b
    8. WHERE
    9. a.constraint_type = 'R'
    10. AND b.constraint_type = 'P'
    11. AND a.r_constraint_name = b.constraint_name
    12. AND a.constraint_name = 'FK_TEST_FUE';

    这样我们就可以查询出:外键约束的名称(a.constraint_name)、外键约束所在的表名(a.table_name)、以及相关的主键约束的名称(b.constraint_name)。

    获取到a.table_name的表名,通过父表的主键去删除a.table_name表中的子数据即可。

  • 相关阅读:
    React-View-UI组件库封装——Loading加载中
    hbase建表时设置预分区
    arcgis属性表十进制度转换成度分秒格式--转换坐标注记法
    电脑入门:如何进入路由器(TP-LINK,PPPoE)设置界面
    Nginx的配置
    Minimum Varied Number Codeforces 1714C
    荧光染料CY3修饰PPS聚苯硫醚,PBA苯硼酸,PAE聚(β-氨基酯),聚缩醛,透明质酸
    深入浅出Flask PIN
    基于Spider的全站数据爬取
    MySQL-子查询(IN/ANY/ALL/EXIST/NOT EXIST)
  • 原文地址:https://blog.csdn.net/HJW_233/article/details/139807254