问题现象

使用如下的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知识库】自关联外键插入数据时报错:YAS-02033 foreign key constraint violated parent key not found的更多相关文章

  1. mysql使用truncate截断带有外键的表时报错--解决方案

    报错内容如:1701 - Cannot truncate a table referenced in a foreign key constraint 一.为什么要使用truncate 使用trunc ...

  2. mysql truncate带有被引用外键的表时报错解决方法

    清空具有外键约束的表时报ERROR 1701(42000)的解决   mysql> truncate table t_users;ERROR 1701 (42000): Cannot trunc ...

  3. mongoDB数据库插入数据时报错:db.collection is not a function

    nodejs连接mongodb插入数据时,发现mongoDB报错:db.collection is not a function.解决方法: 1.npm下载mongodb2.x.x版本替换3.x.x ...

  4. SQL Server 2008 批量插入数据时报错

    前几天在SQL Server 2008同步产品数据时,总是提示二进制文本被截断的错误,但是经过检查发现数据都符合格式要求. 百思不得其解,单独插入一条条数据则可以插入,但是批量导入则报错. 批量导入代 ...

  5. MySQL插入数据时报错Cause: java.sql.SQLException: #HY000的解决方法

    数据库中有字段要求不能为空,但是insert插入的时候,改字段没有值

  6. ORM执行SQL语句,神奇的双下划线查询,ORM外键字段的创建,外键字段数据的操作,多表查询

    ORM执行SQL语句,神奇的双下划线查询,ORM外键字段的创建,外键字段数据的操作,多表查询 一.ORM执行SQL语句 有时候ORM的操作效率较低,我们是可以自己来编写SQL语句的 方式一: res ...

  7. SQL 关联外键报错类型不匹配

    如题,关联外键的时候,报错类型匹配.但是两个 类型都是int sql 如下: CREATE TABLE IF NOT EXISTS `alert_receiver_map` ( `id` INT UN ...

  8. django 获取外键对应数据的方式

    模型 models.py中 from django.db import models class User(models.Model): name = models.CharField() class ...

  9. c#保存datagridview中的数据时报错 “动态SQL生成失败。找不到关键信息”

    ilovejinglei 原文 C#中保存datagridview中的数据时报错"动态SQL生成失败.找不到关键信息" 问题描述     相关代码 using System; us ...

  10. mybatis批量插入oracle时报错:unique constraint (table name) violated

    mybatis批量插入oracle时报错:unique constraint (table name) violated,是因为插入的集合中有两条相同唯一约束的数据.

随机推荐

  1. 1. 简述一下你对 HTML 语义化的理解?

    用正确的标签做正确的事情.1.HTML 语义化让页面的内容结构化,结构更清晰,便于对浏览器.搜索引擎解析; 2.即使在没有样式 CSS 的情况下也能以一种文档格式显示,并且是容易阅读的; 3.搜索引擎 ...

  2. yb课堂 新版VueCli 4.3创建vue项目,Vue基础语法入门 《二十九》

    Vue模版语法开发起步 基于HTML的模版语法,允许声明式地将DOM绑定至底层Vue实例的数据 用简洁的模版语法来声明式的将数据渲染进DOM的系统 结合响应系统,在应用状态改变时,Vue能够智能地计算 ...

  3. 原创软件 | 第3期:PDF合并分割助手V1.0(个人免费)

    这是一个短的"发布会". 01 基本介绍 近期开发了一个[PDF合并分割助手]. 它是一个实现pdf快速合并.分割的免费软件. 你拥有以下7种选项设置. >>合并选项& ...

  4. var 和 let 在 jQuery中的区别

    下面通过代码案例来进一步解释 var 和 let 在 jQuery link 函数中的区别: (function ($) { $.fn.link = function () { // Example ...

  5. vs2019如何自动生成有下划线前缀的字段名?

    vs2019代码自动完成功能非常强大,今天要说的是根据构造函数的参数自动生成字段的事儿. 下图所示,IDE可以根据构造函数的参数自动生成私有字段 这个功能非常好,代码编写效率大大提升,生成的代码如下: ...

  6. 使用 Node.js 和 Express 构建基本的 Web API

    使用 Node.js 和 Express 构建 Web API Web API Node.js 中的 http 模块 创建 Express 框架 Web 应用程序 Express 框架 Express ...

  7. 一文揭开JDK21虚拟线程的神秘面纱

    虚拟线程快速体验 环境:JDK21 + IDEA public static void main(String[] args) { try (var executor = Executors.newV ...

  8. JAVA私有构造函数---java笔记

    在Java中,构造函数是一种特殊的方法,它用于初始化新创建的对象.当我们创建一个类的实例时,构造函数会自动被调用. 构造函数可以有不同的访问修饰符,如public.protected.default( ...

  9. 【SpringBoot】数据源加密处理

    代码审计报告提出的一个问题: 明文暴露配置信息风险 解决方案可以使用jasypt实现 需要使用依赖: <dependency> <groupId>com.github.ulis ...

  10. 【Vue】Re13 CLI(Command Line Interface)

    一.What is CLI Command Line Interface 命令行接口 但是说是命令行界面,在官方又被称为脚手架 一个单词三个意思,所以令人困惑 但是根据实际意义用途来说就是帮助开发者更 ...