首页 > 数据库 >【YashanDB数据库】自关联外键插入数据时报错:YAS-02033 foreign key constraint violated parent key not found

【YashanDB数据库】自关联外键插入数据时报错:YAS-02033 foreign key constraint violated parent key not found

时间:2024-08-05 15:40:26浏览次数:15  
标签:语句 yashandb parent self 外键 插入 key YashanDB

问题现象

使用如下的sql语句创建自关联外键表:

drop table self_f_key;
create table self_f_key(t1 number primary key not null, t2 number);
create index i_s_1 on self_f_key(t2);
alter table self_f_key add constraint c_0001 foreign key(t2) references self_f_key(t1);

然后使用如下语句,尝试插入两行数据,这两行数据汇总起来,是符合外键关联关系的:insert into self_f_key select 1,2 from dual union all select 2,1 from dual;

但是yashandb插入失败:

问题的风险及影响

影响正常的业务处理流程,同样的建表语句,同样的insert,可以在oracle中正常执行:

问题影响的版本

所有的yashandb版本

问题发生原因

目前yashandb在处理此种情况下的完整性约束判断时,没有在事务级进行统一判断,而是使用了类似于一行一行的判断逻辑,

所以在事务级看来没有违反完整性约束的数据无法插入

解决方法及规避方式

规避方法:禁用外键约束

问题分析和处理过程

根据现网的问题场景,构造可以同时在yashandb/oracle执行的sql语句,比较并确认双方的表现差异

yashandb对于此种情况下完整性约束的判断核心在idxCheckKeyExist方法中

经验总结

构造可以同时在yashandb/oracle执行的语句,方便分析确认问题

标签:语句,yashandb,parent,self,外键,插入,key,YashanDB
From: https://www.cnblogs.com/YashanDB/p/18343324

相关文章

  • 【YashanDB数据库】ycm托管数据库时报错OM host ip:127.0.0.1 is not support join to
    问题现象托管数据库时检查报错OM的IP是127.0.0.1,不支持托管到YCMOM问题的风险及影响导致数据库无法托管监控问题影响的版本问题发生原因安装数据库时修改了OM的监听ip为127.0.0.1解决方法及规避方式后台修改OM的ip为本机的ip或者0.0.0.0问题分析和处理过程1、修改en......
  • kubekey是一个k8s轻量工具
    Skiptocontent NavigationMenukubesphere/kubekey    CodeIssues302Pullrequests20DiscussionsActionsProjectsWikiSecurity        masterBreadcrumbskubekey/README_zh-CN.md ......
  • 优酷ckey140逆向
    ​声明:本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!wxa15018601872       本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲......
  • Caused by: io.lettuce.core.RedisCommandExecutionException: WRONGTYPE Operation a
    当遇到io.lettuce.core.RedisCommandExecutionException:WRONGTYPEOperationagainstakeyholdingthewrongkindofvalue这个异常时,说明你在Redis中尝试执行的操作与存储在特定键中的数据类型不匹配。下面是一些具体的步骤来帮助你解决问题:1.确定键的数据类型首先,你......
  • 小程序session_key泄露
    1.登录界面抓包现在需要三个参数:iv值,session_key和密文2.利用burp插件AppletPentester解密,修改内容,加密来验证任意用户登录下载地址:https://github.com/mrknow001/BurpAppletPentester/releases/tag/v1.1......
  • 6.key的层级结构
    redis的key允许多个单词形成层级结构,多个单词之间用:隔开,格式如下:项目名:业务名:类型:id这个格式并非固定的,可以根据自己的需求来删除或添加词条。例如:taobao:user:1taobao:product:1如果value是一个java对象,例如一个user对象,则可以将其序列化为json字符串后存储:ta......
  • 基于hibernate-validator实体字段唯一性检查 ,UniqueKey注解
    基于hibernate-validator实体字段唯一性检查,UniqueKey注解前言经常会在新增或修改时,检查某个字段或者多个字段的唯一性,如果重复就需要返回错误信息,重复代码写多了就准备写校验注解解决这个问题,分为两个版本,hibernate和mybatisplus1.mybatisplus注解/***唯一约束*<p>......
  • Redis过期key的删除策略
    在Redis中,设置了过期时间的键在过期时间到达后,并不会立即从内存中删除。如果不是,那过期后到底什么时候被删除呢?下面对这三种删除策略进行具体分析。立即删除:立即删除能够保证内存数据的及时性和空间的有效利用,但在处理大量过期键时,它可能会对系统性能产生负面影响。优点......
  • 通过 python 连接到 Snowflake 时出错“UnpicklingError: invalid load key, '\x00'
    我在使用snowflake.connector.connect通过python连接到snowflake时遇到以下错误importsnowflake.connector#pipinstallsnowflake-connector-python#iamgettingtheenvfrom.envfileistoredlocallycnx=snowflake.connector.connect(user=os.getenv('USER'),pass......
  • 基于N32L406MB EasyFlash参数(key-value)记录库移植
    EasyFlash感谢作者的分享https://github.com/armink/EasyFlashEasyFlash是一款开源的轻量级嵌入式Flash存储器库,方便开发者更加轻松的实现基于Flash存储器的常见应用开发三大实用功能ENV快速保存产品参数(key-value),支持写平衡(磨损平衡)及掉电保护功能EasyFlash不仅......