天天看點

nodejs(koa架構)如何利用mysql向資料庫插入一條記錄後傳回該記錄的key

今天做畢設遇到這麼一個問題:

向資料庫的表中插入一條記錄,然後需要傳回這條記錄的鍵(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了 
	}
})
           

繼續閱讀