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

如何从Query Builder获取记录的最后插入ID

获取MySQL自增插入ID的解决方案

嘿,我来帮你搞定插入记录后拿自增ID的问题!你现在的代码只是返回插入成功的布尔值,要拿到自动生成的ID其实很简单,给你两种靠谱的方案:

1. 直接从插入回调的结果里拿

大多数MySQL Query Builder库在执行完insert操作后,回调里的res参数都会带插入记录的自增ID,一般是insertId这个字段。你可以直接提取它,还能顺便把错误处理补全(原代码没判断错误,这可不行哦):

// Add Schedule
exports.addSchedule = function addSchedule(data){
  return new Promise(function(resolve, reject){
    db.queryBuilder.insert(tableName, data, (err, res) => {
      // 先处理错误,不然出问题都不知道为啥
      if(err) {
        console.error('插入失败啦:', err);
        reject(err);
        return;
      }
      // 这里拿到自增ID
      const insertId = res.insertId;
      console.log('插入成功!生成的ID是:', insertId);
      console.log('最后执行的SQL:', db.queryBuilder.last_query());
      // 把ID返回出去,比返回true实用多了
      resolve(insertId);
    });
  });
}

2. 用MySQL自带的函数查ID

如果你的Query Builder比较特殊,回调里没返回ID,那直接调用MySQL的756775函数也能拿到,不过要注意这个函数是基于当前连接的,所以要在同一个连接里执行:

// Add Schedule
exports.addSchedule = function addSchedule(data){
  return new Promise(function(resolve, reject){
    db.queryBuilder.insert(tableName, data, (err, res) => {
      if(err) {
        console.error('插入失败:', err);
        reject(err);
        return;
      }
      // 执行查询获取自增ID
      db.queryBuilder.query('SELECT 756775 AS insertId', (queryErr, queryRes) => {
        if(queryErr) {
          console.error('拿ID失败了:', queryErr);
          reject(queryErr);
          return;
        }
        const insertId = queryRes[0].insertId;
        console.log('插入成功,ID是:', insertId);
        console.log('最后执行的SQL:', db.queryBuilder.last_query());
        resolve(insertId);
      });
    });
  });
}

额外小建议

  • 错误处理一定要做:原代码没判断err,万一插入失败会直接走reject(false),连错误信息都看不到,排查问题会头大,所以优先处理错误!
  • 可以试试async/await简化代码:如果你的环境支持,用async/await写起来更清爽,可读性也更高:
exports.addSchedule = async function addSchedule(data){
  try {
    const res = await db.queryBuilder.insert(tableName, data);
    const insertId = res.insertId;
    console.log('插入成功!ID:', insertId);
    console.log('最后执行的SQL:', db.queryBuilder.last_query());
    return insertId;
  } catch(err) {
    console.error('插入翻车了:', err);
    throw err;
  }
}

这样修改之后,你调用addSchedule的时候就能直接拿到插入的自增ID啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:52:12