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

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 在处理此种情况下的完整性约束判断时,没有在事务级进行统一判断,而是使用了类似于一行一行的判断逻辑,所以在事务级看来没有违反完整性约束的数据无法插入解决方法及规避方式规避方法:禁用外键约束问题分析和处理过程根据现网的问题场景

25600

【Node】sequelize 使用对象的方式操作数据库

,但是上面明显没有写明外键,所以 sequelize 会推断外键在 IdCard 中为 personId,如果没有就会报错 [找不到 idCard.personId 这个字段] 自定义外键,在 IdCard...查出用户所有的评论 person.findAll({ include:personComment }); 如果想通过评论查出用户信息,同样使用 belongsTo 关联即可 3多对多 多对多比较特殊一点,因为此时外键放在哪张表都无法满足...SET NULL: 从父表中删除或更新对应的行,同时将子表中的外键列设为空。注意,这些在外键列没有被设为NOT NULL时才有效。...2、数据库自带外键约束 只要在数据库表中定义了两表关联的外键,那么当删除父表数据时,子表关联的数据也会被自动删除。...这个操作不需要经过 sequelize,完全从 数据库层面配置 下面就是添加外键的 sql 语句,给 comment 加上外键 user_id ,关联 person 表的id alter table `

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

    【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

    18200

    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; -- 执行插入语句

    21200

    Sequelize笔记

    这也适用于关联生成的外键. // 将自动设置所有属性的字段参数为下划线命名方式. // 不会覆盖已经定义的字段选项 // 这样 updatedAt 的字段名会是 updated_at underscored...可以设置外键foreignKey,但不能设置目标主键targetKey(设置了也无效),可用sourceKey代替。 // 一个Show有多个Car,即Show是主表,Car是副表。...Car默认外键:ShowTableIds // Show.hasMany(Car) // 将Car表设置别名xxx // Show.hasMany(Car, { as:'xxx' }) // 一个Show...Car指定外键:idc // Show.hasMany(Car, { foreignKey: 'idc' }) // 一个Show有多个Car,即Show是主表,Car是副表。...使用后:TagList Tag.belongsToMany(Article, { as: 'TagList' }) // 将article_id添加到Article_tag,即article_id是外键

    4.8K10

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

    问题现象使用如下的 sql 语句创建自关联外键表:drop table self_f_key;create table self_f_key(t1 number primary key not null...);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...在处理此种情况下的完整性约束判断时,没有在事务级进行统一判断,而是使用了类似于一行一行的判断逻辑,所以在事务级看来没有违反完整性约束的数据无法插入解决方法及规避方式规避方法:禁用外键约束问题分析和处理过程根据现网的问题场景

    18500

    Node 架构从三层到 N 层,实现代码重用和解耦

    的每次DML操作结果都是返回一个Promise对象,这是符合我的初衷的,业务层通过执行then函数处理成功返回的结果,通过catch函数捕获异常对象,另外Sequelize支持外键查询以及事务处理,完全符合我们的项目开发要求...我发现两种方式都有这样的一句代码{transaction : t},如果我们把User_info.create方法封装到Dao层,代码如图9所示,但是图9的代码是无法实现一个事务的,必须将{transaction...这个问题困扰了我整整一天,通过不断地运行测试代码,阅读Sequelize的源码和谷歌,我终于找到了答案,CLS+unmanagement transaction,在启动事务时,设置transaction...自动提交和回滚事务的代码以及执行结果 db.sequelize.transaction().then(function (t) { db.User_Info.create({ '..., config.sequelize.password, config.sequelize), _namespace : namespace }; db.sequelize.transaction

    8.3K31

    如何开发车辆管理系统中的加油管理板块(附架构图+流程图+代码参考)

    更可怕的是,出现问题时无法追溯责任,赔本还丢人。本文从中小企业可落地的角度出发,为大家讲解如何快速开发车辆管理系统中的加油管理板块,帮助企业降本增效。...:重复报销、伪造发票或里程倒退;对账慢:财务每月对账耗时长,还常常发现差异;无法分析:没有按车辆、司机、线路分摊油耗数据,无法做成本优化。...const t = await sequelize.transaction(); try { const { vehicleId, driverId, cardId, station, liters...req.params.id; const { amount, rechargeDatetime, source, externalOrderId } = req.body; const t = await sequelize.transaction...同时提供便捷的审批工具(移动端通知、一键通过/驳回并填写理由),减少审批阻塞。审批记录要完整留痕,审批结果直接影响是否从油卡扣减或生成会计凭证。

    40810

    微信小程序云开发—云函数连接MySQL

    = require('sequelize') // const sequelize = new Sequelize('数据库名称', '用户名', '密码', { const sequelize =...('user', { firstName: { type: Sequelize.STRING }, lastName: { type: Sequelize.STRING...} }) cloud.init() exports.main = async (event, context) => { //这里进行调用创建USER表,并且插入一条数据,最后返回结果给调用者...wxcloud/basis/getting-started.html 测试调用云函数 我们只需要在预先设置的mysql编译模式下后,点击我们的按钮观察控制台打印的结果,和数据库可视化工具是否创建了表和插入数据...Navicat 可以看到我们远端的MySQL数据库已经创建了USER表并且插入一条数据。 总结 个人比较推荐直接使用云开发自带的数据库,因为速度快,用外连MySQL的话会收到网络波动的影响。

    5.9K20
    领券