如何从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
相关产品推荐
相关产品推荐

