• 给已有数据的oracle表建立外键关系


    PS:这里是给自己做个备忘,下次遇到同类问题的时候,方便查找;

      客户在有主外键关系的2张表进行页面删除时报错已有子记录,运维后台处理的时候应该找出相应的数据,先删除子记录,在删主表记录;但客户要的急,就执行了错误的操作,删除了外键约束,在执行的删除,但在通过alter语句进行添加外键的时候,报错未找到父项关键字;

    网上搜索了下,说未找到父项关键字的原因是2张表的数据不统一,后通过minus关键字查询2张表的差值,确实存在;

    在google之后发现了2种方法可以解决:

      1、删除多余的数据,保持2张表数据统一,在执行 alter table 表1 add constraint FK_XXX foreign key(字段1)  references 表2 (字段2);就不会报错了;

    (ps:这种方式在实际生产过程中不实际,生产环境数据不能随便删除的,所以这种方式不现实,不推荐)

      2、在alter语句之后加上enable novalidate即可,即

    alter table 表1 add constraint FK_XXX foreign key(字段1)  references 表2 (字段2) enable novalidate;

    (ps:enable novalidate指的是允许已有记录不满足约束条件,但新增/修改的记录则必须满足约束条件)

    这是其他3种的含义:

      Enable Validate与Enable相同,检查已有记录和新增记录,确保都符合约束;

      Disable Validate禁用约束,删除约束上的索引,不允许修改任何被约束的记录;

      Disable Novalidate与Disable相同,禁用约束,删除约束上的索引,且允许修改被约束的记录。
    ---------------------
    关于oracle约束关键字Enable/Disable/Validate/Novalidate的详情,可以查看这篇原文,传送门
    原文:https://blog.csdn.net/huang_xw/article/details/6396846

    人的价值体现在不可替代性上
  • 相关阅读:
    php中 include 、include_once、require、require_once4个语言结构的含义和区别
    PHP yield 分析,以及协程的实现,超详细版(上)
    wordpress里的bloginfo()与get_bloginfo()
    CSS定位中“父相子绝”
    Apache 的 httpd.conf 详解
    apache的<directory>语句以及属性的含义
    你必须了解的Session的本质(PHP)
    Linux常用命令
    vmware中配置CentOS
    程序员可能会遇到的一些名词
  • 原文地址:https://www.cnblogs.com/zxg0822/p/10382746.html
Copyright © 2020-2023  润新知