node 連接並簡單操作 mysql 數據庫


1, 下載 mysql 依賴 => npm -i mysql

2, 寫一個核心工具類, 用於獲取線程池連接 mysql-util.js

// 引入 mysql 數據庫連接依賴
const mysql = require("mysql"); // 創建 mysql 連接池並配置參數
const pool = mysql.createPool({ host: "192.168.200.100",    // 主機地址
    port: 3306,                 // 端口
    user: "root",               // 數據庫訪問賬號
    password: "920619",         // 數據庫訪問密碼
    database: "test",           // 要訪問的數據庫
    charset: "UTF8_GENERAL_CI", // 字符編碼 ( 必須大寫 )
    typeCast: true,             // 是否把結果值轉換為原生的 javascript 類型
    supportBigNumbers: true,    // 處理大數字 (bigint, decimal), 需要開啟 ( 結合 bigNumberStrings 使用 )
    bigNumberStrings: true,     // 大數字 (bigint, decimal) 值轉換為javascript字符對象串
    multipleStatements: false,  // 允許每個mysql語句有多條查詢, 未防止sql注入不開啟
    //connectTimeout: 5000, // 數據庫連接超時時間, 默認無超時
}); pool.connectionLimit = 10;      // 連接池中可以存放的最大連接數量
pool.waitForConnections = true; // 連接使用量超負荷是否等待, false 會報錯
pool.queueLimit = 0;            // 每個連接可操作的 列數 上限, 0 為沒有上限

// 對外暴漏從連接池中獲取數據庫連接的方法
module.exports = function () { return new Promise((resolve, reject) => { pool.getConnection((err, conn) => { if (err) { console.log("數據庫連接獲取失敗"); } else { resolve(conn); } }); }); };

2, 執行簡單的操作測試

// 引入工具類
let mysqlUtil = require("./mysql-util"); // 聲明一個同步方法, 這里要求有 SQL 語句的基礎
let ceshi = async function () { // 獲取連接, es6 新特性 awit 不能少
    let conn = await mysqlUtil(); // 准備一個防 SQL 注入的 SQL 語句, 並准備參數
    let sqlStr = "INSERT INTO user (UserName, UserSex) value (?, ?)"; let sqlParam = ["姓名", 1]; // 執行 SQL 語句並返回結果
    conn.query(sqlStr, sqlParam, function (err, ret) { console.log(ret);
     conn.release();  }); };
// 調用方法 ceshi();

3, 執行帶事務的操作測試

// 引入工具類
let mysqlUtil = require("./mysql-util"); // 聲明一個同步方法, 這里要求有 SQL 語句的基礎 // 在 beginTransaction 和 commit 之間可以執行多次 query 方法
let ceshi = async function () { // 獲取連接
    let conn = await mysqlUtil(); // 開啟事物
    await new Promise((resolve, reject) => { conn.beginTransaction(err => { if (err) { reject(err); } else { resolve(); } }); }); // 執行第一個 SQL 語句
    let result1 = await new Promise((resolve, reject) => { let sqlStr = "INSERT INTO user (UserName, UserSex) values (?, ?)"; let sqlParam = ["姓名2", 0]; conn.query(sqlStr, sqlParam, function (err, ret) { if (err) { // 回滾之前的數據庫操作, 直至碰到 beginTransaction
                return conn.rollback(() => { resolve(err); }); } resolve(ret); }); }); console.log(result1); // 執行第二個 SQL 語句
    let result2 = await new Promise((resolve, reject) => { let sqlStr = "SELECT * FROM user"; //let sqlStr = "SELEC * FROM user"; // 錯誤的 SQL 語句
        conn.query(sqlStr, function (err, ret) { if (err) { // 回滾之前的數據庫操作, 直至碰到 beginTransaction
                return conn.rollback(() => { resolve(err); }); } resolve(ret); }); }); console.log(result2); // 關閉事務
    await new Promise((resolve, reject) => { conn.commit(err => { if (err) { reject(err); } else { resolve(); } }); });
   conn.release();   };
// 調用測試方法 ceshi();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM