今天做畢設遇到這麼一個問題:
向資料庫的表中插入一條記錄,然後需要傳回這條記錄的鍵(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了
}
})