【问题标题】:Cannot add or update a child row SQL error无法添加或更新子行 SQL 错误
【发布时间】:2021-04-18 17:55:39
【问题描述】:

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

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", 0), (@habitId, "2021-04-03", 0), (@habitId, "2021-04-04", 0), (@habitId, "2021-04-05", 0), (@habitId, "2021-04-06", 0), (@habitId, "2021-04-07", 0), (@habitId, "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 habit FOREIGN KEY (habitId) REFERENCES habits (habitId) ON删除级联)

还有:

TypeError: db.rollback is not a function

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

【问题讨论】:

  • 只要您在事务中并且没有提交插入,@habit 不在数据库中,因此您无法在事务中进行此操作
  • 但是如果我使用事务在 phpmyadmin 中做同样的事情,例如它可以工作。
  • 这仅在事务在同一执行时才有效,您必须检查是否可以执行多个查询

标签: javascript mysql sql node.js foreign-keys


【解决方案1】:

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

await db.beginTransaction();

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

【讨论】:

  • 没错。我现在已经解决了。不幸的是,事务仍然失败并显示 SQL 消息“'格式错误的通信数据包。'”
  • 这不是您在上面的问题中指出的错误。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-06
    • 2018-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    相关资源
    最近更新 更多