今天做毕设遇到这么一个问题:
向数据库的表中插入一条记录,然后需要返回这条记录的键(key),通过网上找的许多方法是插入一条记录后再次使用sql语句去查表:
// 方法1
insert into x1 values ('X2', 'x3', 'x4');
select @@IDENTIFY;
// 方法2
insert into x1 values ('X2', 'x3', 'x4');
select LAST_INSERT_ID();
还有一些方法是通过查询表中的max(key)实现的,但是这样就相当于对表格多进行了一次查询操作,有些麻烦;
正文
我使用的是nodejs的koa框架,搭配的是MySQL数据库,通过编写一个操作数据库的工具类函数,返回每次成功操作数据库后得到的数据:
// 文件名:db.js
// 引入数据库
var mysql = require("mysql")
// 创建数据库连接池
var pool = mysql.createPool({
host: 'localhost', // 连接的服务器
port: 3306, // mysql服务运行端口
database: 'project', // 选择的数据库
user: 'root', // 用户名
password: 'xxx.' // 用户密码
})
// 对数据库进行增删改查的基本操作
function query(sql, callback) {
pool.getConnection(function (err, connection) {
connection.query(sql, function (err, rows) {
callback(err, rows)
connection.release() // 中断连接
})
})
}
exports.query = query
然后在需要使用的地方引入该函数
const Router = require("koa-router")
const person = new Router()
const db = require("db.js文件的路径")
person.post('/address/add', async (ctx, next) => {
// 接收来自前端的参数
let { user_id, customer, address, customer_phone } = ctx.request.body
// sql语句,向shopaddress表中插入记录
let insertAddressSql = `insert into shopaddress (user_id, customer, address, customer_phone) values ('${user_id}', '${customer}', '${address}', '${customer_phone}')`;
let result = await new Promise((resolve, reject) => {
return db.query(insertAddressSql, (err, data) => {
if (err) throw err;
// 将成功信息以及得到的数据data一起返回给前端
let obj = {
msg: '成功插入一条收获地址!',
data:data // 这个data中就含有许多的属性,有兴趣的小伙伴可以打印出来看看,里面的insertId就是新插入的记录的key
}
resolve(obj)
})
})
ctx.body = result
})
前端的代码:
wx.request({
url: 'http://127.0.0.1:5000/person/address/add',
method: "POST",
data: {
user_id: 'xxx',
customer: 'xxx',
address: 'xxx',
customer_phone: 'xxx'
},
header: { // 设置请求的 header
'content-type': 'application/json'
},
success: res => {
console.log(res.data.data.insertId) // 这样前端就可以拿到新插入的记录的key了
}
})