微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法添加或更新子行 SQL 错误

如何解决无法添加或更新子行 SQL 错误

我正在尝试进行以下交易:

static async save(habit){
    await db.beginTransaction;
    try {
        await db.execute('SELECT @habitId:=MAX(habits.habitId)+1 FROM habits');
        await db.execute('INSERT INTO habits(habits.habitId,habits.name,habits.repeatVal,habits.notification,habits.color,habits.question,habits.id) VALUES (@habitId,?,?)',[habit.name,habit.repeatVal,habit.notification,habit.color,habit.question,habit.id]);
        await db.execute('INSERT INTO habit_status(habit_status.habitId,habit_status.date,habit_status.status) VALUES (@habitId,"2021-04-01",0),(@habitId,"2021-04-02","2021-04-03","2021-04-04","2021-04-05","2021-04-06","2021-04-07","2021-04-08",0)');
        await db.commit();

    } catch (err) {
        console.error(`Error occurred while creating habit: ${err.message}`,err);
        db.rollback(function(){});
        console.info('Rollback successful');
        return 'error creating habit';
    }
}

不幸的是,我收到以下错误

创建习惯时发生错误:无法添加或更新子行:外键约束失败 (intend.habit_status,CONSTRAINT habit FOREIGN KEY (habitId) REFERENCES habits (habitId) ON DELETE CASCADE) 错误:无法添加或更新子行:外键约束失败 (intend.habit_status,CONSTRAINT {{1} } 外键 (habit) 参考 habitId (habits) 删除级联)

还有:

habitId

我认为这是因为@habitId 可能没有将habitId 传递给我的第三个执行函数。但为什么?以及如何解决这个问题?

解决方法

至少你没有正确调用 beginTransaction 忘记添加括号:

await db.beginTransaction();

db.rollback 开始,尝试检查 db 是否真的是您期望的数据库连接对象。

,

我们可以发出 await db.commit();在第一个 INSERT 语句之后。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。