You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DELETE语句执行无报错但无法删除数据,请求排查解决

问题排查方案

核心错误点

你当前代码里用results.insertId作为DELETE操作的返回值是完全错误的——DELETE语句不会生成insertId,这会导致你无法正确判断是否有行被删除。应该改用results.affectedRows来获取实际被删除的行数,这是第一个需要修正的地方。

逐步排查步骤

  • 先确认results.affectedRows的值:运行代码后查看控制台输出的results对象,如果affectedRows为0,说明SQL在代码执行时没有匹配到任何行;如果为1,那问题出在你后续的业务逻辑(而非删除操作本身)。
  • 检查数据库字段类型与参数类型是否匹配:即使你认为参数值正确,也要核对数据库中user_id、question_id、answer_id的字段类型(比如是INT还是VARCHAR)。如果数据库字段是字符串类型,但你传入的是数字,可能会因为隐式转换失败导致匹配不到行;另外确认answer_id字段是否允许NULL值。
  • 验证连接池的数据库环境:你手动执行SQL的数据库,和代码中连接池指向的数据库是否为同一个?比如代码连测试库,你手动操作的是生产库,自然看不到删除效果。
  • 查看实际执行的SQL:开启MySQL的通用查询日志,记录代码执行的完整SQL语句,确认参数是否被正确替换。比如NULL参数是否被处理成了数据库能识别的NULL,而非字符串'null'。
  • 核对调用逻辑:检查调用removeFavorite的代码,确认参数顺序是否正确(比如有没有把question_id和answer_id传反)。

修正后的代码示例

removeFavorite(user_id: number, question_id: number, answer_id: number | null) {
    return new Promise<number>((resolve, reject) => {
      pool.query(
        'DELETE FROM favorites WHERE user_id=? AND question_id=? AND answer_id=?',
        [user_id, question_id, answer_id],
        (error, results: ResultSetHeader) => {
          if (error) return reject(error);
          console.log('删除参数:', user_id, question_id, answer_id);
          console.log('执行结果:', results);
          // 返回受影响行数,而非insertId
          resolve(results.affectedRows);
        },
      );
    });
  }

内容的提问来源于stack exchange,提问作者TMK1k

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 15:52:38