首页
学习
活动
专区
圈层
工具
发布

yashandb:自关联外键插入数据时报错

自关联外键插入数据时报错:YAS-02033 foreign key constraint violated parent key not found问题现象使用如下的 sql 语句创建自关联外键表:然后使用如下语句...,尝试插入两行数据,这两行数据汇总起来,是符合外键关联关系的:insert into self_f_key select 1.2 from dual union all select 2.1 from...dual;但是 yashandb 插入失败:问题的风险及影响影响正常的业务处理流程,同样的建表语句,同样的 insert,可以在 oracle 中正常执行:问题影响的版本所有的 yashandb 版本问题发生原因目前...yashandb 在处理此种情况下的完整性约束判断时,没有在事务级进行统一判断,而是使用了类似于一行一行的判断逻辑,所以在事务级看来没有违反完整性约束的数据无法插入解决方法及规避方式规避方法:禁用外键约束问题分析和处理过程根据现网的问题场景

44000
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    为什么不推荐数据库使用外键?

    我的经验告诉我,很多数据库(大多数我曾经使用的)不包含外键时并不总是一件坏事。在这篇文章中,我想把重点放在为什么的原因上。 为什么这是一个问题?...让我们来看看数据库可以没有外键的原因。首先一个简短的免责声明(因为文章引发了一些关于LinkedIn群体的争议):下面的理由绝不鼓励不要在数据库中使用外键约束。...1.性能 在表上拥有活动的外键可以提高数据质量,但会影响插入、更新和删除操作的性能。在这些任务之前,数据库需要检查它是否违反数据完整性。这就是为什么一些架构师和DBA完全放弃外键的原因。...这可以通过在重新加载时禁用外键来绕过。 然而,这引入了额外的逻辑和复杂性以及另一个失败点。如上所述,对性能有负面影响。通常,成本大于收益,开发人员不用担心外键。...这些框架可以自己创建数据库表,而不总是创建外键。使用这些工具的开发人员很少会干扰自动生成的模式,并且不需要外键。

    3K20

    数据库不推荐使用外键的9个理由

    来源:www.jdon.com/49188 我的经验告诉我,很多数据库(大多数我曾经使用的)不包含外键时并不总是一件坏事。在这篇文章中,我想把重点放在为什么的原因上。 为什么这是一个问题?...让我们来看看数据库可以没有外键的原因。首先一个简短的免责声明(因为文章引发了一些关于LinkedIn群体的争议): 下面的理由绝不鼓励不要在数据库中使用外键约束。...1.性能 在表上拥有活动的外键可以提高数据质量,但会影响插入、更新和删除操作的性能。在这些任务之前,数据库需要检查它是否违反数据完整性。这就是为什么一些架构师和DBA完全放弃外键的原因。...这可以通过在重新加载时禁用外键来绕过。然而,这引入了额外的逻辑和复杂性以及另一个失败点。如上所述,对性能有负面影响。通常,成本大于收益,开发人员不用担心外键。...这些框架可以自己创建数据库表,而不总是创建外键。使用这些工具的开发人员很少会干扰自动生成的模式,并且不需要外键。

    3.1K10

    数据库不推荐使用外键的 9 个理由

    2.表格关系不清晰 数据库中缺少外键的另一个不太明显的负面影响是,不了解该模式的人很难找到正确的表并找出表关系。这可能会导致严重的数据库查询和报告问题。 为什么数据库可以没有外键?...让我们来看看数据库可以没有外键的原因。首先一个简短的免责声明(因为文章引发了一些关于LinkedIn群体的争议): 下面的理由绝不鼓励不要在数据库中使用外键约束。...1.性能 在表上拥有活动的外键可以提高数据质量,但会影响插入、更新和删除操作的性能。在这些任务之前,数据库需要检查它是否违反数据完整性。这就是为什么一些架构师和DBA完全放弃外键的原因。...这可以通过在重新加载时禁用外键来绕过。然而,这引入了额外的逻辑和复杂性以及另一个失败点。如上所述,对性能有负面影响。通常,成本大于收益,开发人员不用担心外键。...这些框架可以自己创建数据库表,而不总是创建外键。使用这些工具的开发人员很少会干扰自动生成的模式,并且不需要外键。

    2.4K30

    抖音提前批二面:为啥不推荐使用外键?

    什么是外键? 两张表有关联关系,才会涉及外键的概念。...通俗来说: 成绩表插入数据时,student_id 必须是学生表已存在的 id 学生表删除/更新数据时,会自动删除/更新成绩表中引用 student.id 的数据(级联) 为什么不推荐使用外键?...阿里的开发手册中提到: 【强制】不得使用外键与级联,一切外键概念必须在应用层解决。 定义外键之后,数据库的每次操作都需要去检查外键约束。...对于插入来说,影响了插入速度;对于更新来说,级联更新是强阻塞,存在数据库更新风暴(Database Update Storm)的风险。...因此,外键与级联并不适合分布式、高并发集群,但单机低并发业务可以考虑使用外键保证一致性和完整性。

    83110

    记一次JPA级联问题&CascadeType详解

    遇到的问题 首先我在用springboot-jpa写一个多对多demo,进行插入数据的时候遇到了如下的问题: detached entity passed to persist 大概的意思是该数据插入的时候...这个问题搞了很久,网上的说法也是千奇百怪,后来突然恍然一悟,为什么会要插入数据插不进去,可能会发生的操作是什么,突然就想明白,是做了多对多操作,jpa的多对多操作的特点就是需要做级联,而级联的时候就可能系统认为是插入数据...cascade = CascadeType.MERGE) @JoinTable(name = "user_role", //joinColumns配置当前对象在中间表中的外键...JoinColumn(name = "uid", referencedColumnName = "id")}, //inverseJoinColumns配置对方对象在中间表中的外键...CascadeType.DETACH 级联脱管/游离操作:如果你要删除一个实体,但是它有外键无法删除,你就需要这个级联权限了。它会撤销所有相关的外键关联。 4.

    3.1K10

    【YashanDB知识库】自关联外键插入数据时报错YAS-02033

    问题现象使用如下的sql语句创建自关联外键表:然后使用如下语句,尝试插入两行数据,这两行数据汇总起来,是符合外键关联关系的: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

    36000

    YashanDB 知识库|自关联外键插入失败?别慌,问题出在“判断时机”

    在使用 YashanDB 构建数据模型过程中,部分用户在创建自关联外键表并插入数据时,遇到如下错误:YAS-02033 foreign key constraint violated parent key...:insert into self_f_keyselect 1. 2 from dualunion allselect 2. 1 from dual;该插入语句中,两行数据是互相引用的,理论上在同一事务中应满足外键约束...而上面的插入语句是两行数据互为父子关系,同时插入,如果系统逐行判断:插入第1行:t2=2.但此时 t1=2 还没插入,判断失败;插入第2行:同理。最终,报外键违反错误。...四、Oracle 的行为Oracle 对同样的插入语句不会报错,原因是:Oracle 支持事务级外键判断;会等待整个 INSERT ALL 完成后,再判断外键约束是否成立;这样在事务内部引用自己的数据是被允许的...五、解决办法与规避建议1、暂时关闭外键约束(推荐)在插入前关闭约束,插入后重新启用:alter table self_f_key disable constraint c_0001; -- 执行插入语句

    33800

    一文一点 | 为什么不建议使用数据库外键

    有的SQL规约是这么说的: 【强制】不得使用外键与级联,一切外键概念必须在应用层解决。...用外键不好么,不太好,但也注意,不是不可以,是不建议。 那么这里的不建议,其实也有两说的。 1、如果你为了追求正确性优先于性能的话,可以使用。...3、所以说,在互联网场景里面,涉及到高并发,在外键的约束下,大量的插入、更新、删除操作的性能会降低。...,需要触发相关操作去检查,而不得不消耗资源; 4、每次更新数据,都需要额外的检查另外一张表的数据,容易造成死锁; 总结: 1、互联网行业场景中不推荐使用外键,用户量大,并发度高,如果使用外键,数据库服务器很容易产生性能瓶颈...基于此,互联网场景中都是不建议使用外键的,外键与级联更新适用于单机低并发,不适合分布式、高并发集群。 外键的实质是形成一种 “约束”。

    1.8K20

    高级框架-springDate-JPA 第二天【悟空教程】

    在数据库中建立一对多的关系,需要使用数据库的外键约束。 什么是外键? 指的是从表中有一列,取值参照主表的主键,这一列就是外键。 一对多数据库关系的建立,如下图所示 ?...属性: name:指定外键字段的名称 referencedColumnName:指定引用主表的主键字段名称 unique:是否唯一。默认值不唯一 nullable:是否允许为空。...* 2、如果配置了放弃维护关联关系的权利,则不能删除(与外键字段是否允许为 null,没有关系) * 因为在删除时,它根本不会去更新从表的外键字段了。...:中间表的外键字段关联对方表的主键字段 5.4.3 @JoinColumn 作用: 用于定义主键字段和外键字段的对应关系。...属性: name:指定外键字段的名称 referencedColumnName:指定引用主表的主键字段名称 unique:是否唯一。默认值不唯一 nullable:是否允许为空。

    3.6K10

    springboot整合H2(内置一个月对JPA的学习)

    表名_id 进行映射 如果手动指定外键字段,使用@JoinColumn指定字段 例如 @JoinColumn(name = "my_student_id",referencedColumnName =...测试几种级联操作 级联操作 @OneToMany有一个属性是cascade jpa的级联类型(Cascade Types)包括: ALL 全部 包含下面所有的信息 PERSIST(当父需要保存时,子也会默认保存...DETACH 如果你要删除一个实体,但是它有外键无法删除,你就需要这个级联权限了。它会撤销所有相关的外键关联。...这个一般加载被控端(外键的那种表) 修改 修改我们上面已经看过了,其实还是save 这里不展示了 查询 查询也是一样 上面已经用很大篇幅说了 调用findAll就行 一对多 单向 场景: 校内组织了论坛活动...@JoinColumn(name = "my_user_id",referencedColumnName = "id") //定义外键 也就是多表的字段是my_user_id private User

    4.9K10

    快速学习-JPA中的一对多

    在数据库中建立一对多的关系,需要使用数据库的外键约束。 什么是外键? 指的是从表中有一列,取值参照主表的主键,这一列就是外键。 一对多数据库关系的建立,如下图所示 ?...@JoinColumn 作用:用于定义主键字段和外键字段的对应关系。...默认值不唯一 nullable:是否允许为空。默认值允许。 insertable:是否允许插入。默认值允许。 updatable:是否允许更新。默认值允许。...删除主表数据: 有从表数据 1、在默认情况下,它会把外键字段置为null,然后删除主表数据。如果在数据库的表 结构上,外键字段有非空约束,默认情况就会报错了。...2、如果配置了放弃维护关联关系的权利,则不能删除(与外键字段是否允许为null, 没有关系)因为在删除时,它根本不会去更新从表的外键字段了。

    3K20

    Spring Data JPA 就是这么简单

    ,运行程序我们会发现在 stu 表中新增了一个 class_room_id 的外键。...当一个实体类使用了 mappedBy 属性,表示该类放弃主键的维护,该类生成的表中不存放和它关联类的外键。...级联保存和级联更新的时候你需要知道在保存和更新关联数据的时候是没有关联到外键的,你需要借助关联类去维护外键,下面看代码展示: 教室类级联保存学生,教室类关键代码如下: @OneToMany(mappedBy...); return classRoomRepository.save(room); } 以上这种处理方式是可以在保存教室的时候,把学生也保存到数据库当中,但是因为教室类不进行外键的维护...,虽然学生类保存成功,但是是失败的,因为它们之间的关系并没有建立起来,查看学生表的新增数据我们会发现新增的学生并没有教室的外键存在。

    8.9K50

    Spring的学习笔记(十七)——SpringDataJpa动态查询和复杂的多表操作

    Specifications动态查询 有时我们在查询某个实体的时候,给定的条件是不固定的,这时就需要动态构建相应的查询语句,在Spring Data JPA中可以通过JpaSpecificationExecutor...:需要再从表上新建一列作为外键,他的取值来源于主表的主键 多对多: 中间表:中间表中最少应该由两个字段组成,这两个字段做为外键指向两张表的主键,又组成了联合主键 讲师对学员...@JoinColumn 作用:用于定义主键字段和外键字段的对应关系。...默认值不唯一 nullable:是否允许为空。默认值允许。 insertable:是否允许插入。默认值允许。 updatable:是否允许更新。默认值允许。...:中间表的外键字段关联对方表的主键字段 @JoinColumn 作用:用于定义主键字段和外键字段的对应关系。

    5.9K10

    Spring全家桶之SpringData——Spring Data JPA

    ,一般在存在外键的那个列 ,一般与@JoinColumn连用 @OneToMany() 指一对多关系 .cascade=CascadeType.PERSIST 表示对该外键开启级联操作 ,mappedBy...表示被该外键对象属性引用 @ManyToMany() 指多对多关系 .cascade=CascadeType.PERSIST 表示对该外键开启级联操作 mappedBy 表示被该外键对象属性引用fetch...=FetchType.EAGER : 放弃延迟加载,解决多对多查询时,查询闻不到对象的问题 @JoinColumn(name=“roles_id”) 在本表创建roles_id 这个栏位开启外键并维护这个外键一般与级联操作的属性同时出现...@JoinTables 映射中间表信息,配置在哪一侧都可以,多对多joinColumns: 当前表主键所关联的中间表中的外键字段inverseJoinColumns :建立另一张表在中间表中的外键字段...一对多的关联操作 需求:从角色到用户的一对多的关联关系 角色:一方 用户:多方(添加外键) 创建用户实体 需要在添加外键的那一开启级联操作 ,防止数据插入时出现异常 @ManyToOne(cascade

    5K10

    【Java关系映射入门】实战二

    前言 理解 Java 中的关系映射(JPA/Hibernate)是构建数据库驱动应用的核心。...数据库体现: 有 3 种主要方式: 共享主键: 一方的主键同时作为另一方的主键和外键。 外键在任意一方: 一方拥有一个指向另一方主键的唯一外键列(更常见)。...独立的关联表: 创建一个只有两个外键列的表(较少用,不如前两种高效)。 使用: 在持有外键的一方(关系拥有方)使用 @OneToOne。...唯一性约束: 确保数据库中外键列有唯一约束 (unique = true),强制一对一关系。JPA 的 @JoinColumn(unique=true) 会生成此约束。...共享主键: 需要额外配置(如 @MapsId)让从实体使用主实体的主键作为自己的主键和外键。更复杂,但能节省一列。

    31710

    JPA实体类中的注解

    ,而一的一方是不能操作外键的; @oneToMany(cascade={CascadeType.*},fetch=FetchType....*,optional=true|false) @JoinColum(name="")--》维护关系(外键) 一般定义级联保存、级联查询 默认为立即加载! optional可选?...joinColum指关系维护端本身的外键 总结 关系被维护端用mapperBy来定义关系 关系维护端用joinColum来指定外键名称,维护外键或者是@JoinTable通过中间表维护关系 *ToOne...insertable:表示在ORM框架执行插入操作时,该字段是否应出现INSETRT语句中,默认为true。 ...表示一个多对一的映射,该注解标注的属性通常是数据库表的外键  optional:是否允许该字段为null,该属性应该根据数据库表的外键约束来确定,默认为true  可选  fetch:表示抓取策略,

    6.7K70

    《Spring Boot + JPA 实战》第8招 关联关系别乱加

    今天我们不聊花活,就聊每个写JPA的人都会踩的坑:关联映射不是写注解,而是在设计对象图和数据库之间的契约。...在JPA里,关系映射不是“定义关系”,而是“定义谁负责把关系写进数据库”。拥有外键列的那一方,就是owningside。...mappedBy的意思很直白:我不维护外键,我只是对方关系的镜像。...中间实体成了业务概念的载体,而不是一段只有两个外键的隐式关系。08、小结JPA的关联映射,写注解只是第一步,真正的功夫在边界和所有权。...mappedBy:标注在非owningside上,表示“我不维护外键,只是对方关系的镜像”。Cascade:级联操作范围,告诉JPA父实体的哪些持久化操作要传递给子实体。

    24011
    领券