MySQL 連接池 (Pool) 常用方法詳解

MySQL 連接池 (Pool) 常用方法詳解

1. 創建連接池

首先需要創建連接池實例:

const mysql = require('mysql2/promise'); // 使用Promise版本const pool = mysql.createPool({host: 'localhost',user: 'root',password: 'password',database: 'test',waitForConnections: true,connectionLimit: 10, // 最大連接數queueLimit: 0 // 無限制的排隊請求
});

2. 核心方法

2.1 pool.query(sqlString, [values])

  • 作用:執行SQL查詢的最簡單方法
  • 特點
    • 自動獲取和釋放連接
    • 支持參數化查詢
  • 返回值[rows, fields]
  • 示例
const [rows] = await pool.query('SELECT * FROM users WHERE age > ?', [18]);

2.2 pool.execute(sqlString, [values])

  • 作用:執行預處理語句
  • 特點
    • query()更高效(特別是重復查詢)
    • 自動創建和緩存預處理語句
  • 返回值[rows, fields]
  • 示例
const [rows] = await pool.execute('SELECT * FROM products WHERE price > ?', [100]);

2.3 pool.getConnection()

  • 作用:顯式獲取一個連接
  • 使用場景
    • 需要執行事務
    • 需要執行多個相關查詢
  • 注意:必須手動釋放連接
  • 示例
const connection = await pool.getConnection();
try {// 使用connection執行查詢
} finally {connection.release(); // 必須釋放
}

3. 連接對象(Connection)方法

通過getConnection()獲取的連接對象有以下方法:

3.1 connection.query()

  • pool.query(),但在特定連接上執行

3.2 connection.execute()

  • pool.execute(),但在特定連接上執行

3.3 connection.beginTransaction()

  • 作用:開始事務
  • 示例
await connection.beginTransaction();

3.4 connection.commit()

  • 作用:提交事務
  • 示例
await connection.commit();

3.5 connection.rollback()

  • 作用:回滾事務
  • 示例
await connection.rollback();

3.6 connection.release()

  • 作用:釋放連接回連接池
  • 重要:必須調用,否則會導致連接泄漏

4. 連接池管理方法

4.1 pool.end()

  • 作用:優雅關閉連接池
  • 示例
await pool.end(); // 關閉所有連接

4.2 pool.escape(value)

  • 作用:手動轉義值
  • 示例
const name = pool.escape(userInput); // 防止SQL注入

4.3 pool.escapeId(identifier)

  • 作用:轉義標識符(表名、列名)
  • 示例
const tableName = pool.escapeId('user table');

5. 事務處理完整示例

const connection = await pool.getConnection();
try {await connection.beginTransaction();// 執行多個操作await connection.query('UPDATE accounts SET balance = balance - ? WHERE id = ?', [100, 1]);await connection.query('UPDATE accounts SET balance = balance + ? WHERE id = ?', [100, 2]);await connection.commit();
} catch (err) {await connection.rollback();throw err;
} finally {connection.release();
}

6. 事件監聽

連接池可以監聽以下事件:

6.1 'acquire'

  • 當從池中獲取連接時觸發
pool.on('acquire', (connection) => {console.log('Connection %d acquired', connection.threadId);
});

6.2 'release'

  • 當連接釋放回池中時觸發
pool.on('release', (connection) => {console.log('Connection %d released', connection.threadId);
});

6.3 'enqueue'

  • 當查詢需要等待可用連接時觸發
pool.on('enqueue', () => {console.log('Waiting for available connection slot');
});

7. 最佳實踐

  1. 總是使用參數化查詢防止SQL注入
  2. 及時釋放連接避免連接泄漏
  3. 合理設置連接池大小根據應用負載調整
  4. 事務中使用try-catch確保正確處理錯誤
  5. 考慮使用ORM如Sequelize、TypeORM簡化復雜操作

8. 性能提示

  • 對于高頻查詢,使用execute()query()更高效
  • 批量操作考慮使用連接池的單個連接
  • 長時間不用的連接池應該調用end()關閉

這些方法涵蓋了MySQL連接池的絕大多數使用場景,合理使用可以構建高效可靠的數據庫應用。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/903584.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/903584.shtml
英文地址,請注明出處:http://en.pswp.cn/news/903584.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

大型連鎖酒店集團數據湖應用示例

目錄 一、應用前面臨的嚴峻背景 二、數據湖的精細化構建過程 (一)全域數據整合規劃 (二)高效的數據攝取與存儲架構搭建 (三)完善的元數據管理體系建設 (四)強大的數據分析平臺…

GNU gettext 快速上手

文章目錄 1.簡介2.核心概念國際化 (i18n)本地化 (l10n)POT 文件PO 文件MO 文件文本域翻譯函數 3.主要組件4.使用示例參考文獻 1.簡介 GNU gettext 是一套用于軟件國際化(internationalization,i18n)和本地化(localization&#x…

分享:VTK版本的選擇 - WPF空域問題

在早期版本中,ActiViz 對 Windows Presentation Foundation (WPF) 框架的支持是通過 WindowsFormHost 組件實現的,這種方式依賴于 WindowsForm 和 WPF 的互操作性。然而,這種方法存在一個眾所周知的“空域問題”(airspace issue&a…

python數據分析(六):Pandas 多數據操作全面指南

Pandas 多數據操作全面指南:Merge, Join, Concatenate 與 Compare 1. 引言 在數據分析工作中,我們經常需要處理多個數據集并將它們以各種方式組合起來。Pandas 提供了多種強大的多數據操作方法,包括合并(merge)、連接(join)、連接(concaten…

spring 面試題

一、Spring 基礎概念 什么是 Spring 框架? Spring 是一個開源的 Java 應用程序框架,它提供了一種輕量級的、非侵入式的方式來構建企業級應用。Spring 的核心功能包括依賴注入(Dependency Injection,DI)、面向切面編程…

OpenCV-Python (官方)中文教程(部分一)_Day20

22.直方圖 22.1直方圖的計算,繪制與分析 使用 OpenCV 或 Numpy 函數計算直方圖 使用 Opencv 或者 Matplotlib 函數繪制直方圖 將要學習的函數有:cv2.calcHist(),np.histogram() 什么是直方圖呢?通過直方圖你可以對整幅圖像的灰度分布有一個整體的 了…

數電發票整理:免費實用工具如何高效解析 XML 發票數據

如今數字電子發票越來越普及,但是數電發票的整理還是頗有講究~ 今天給大家介紹一個 XML 發票閱讀器。使用它完全不收取任何費用,且無廣告干擾,對財務人員而言十分實用。 01 軟件介紹 這款軟件就是XML格式(數電票)閱讀…

深度學習正則化:原理、方法與應用深度解析

摘要 本文深入探討深度學習中的正則化技術,介紹其避免過擬合的重要性,詳細講解常見的正則化方法,如 L 1 L_1 L1?和 L 2 L_2 L2?正則化、Dropout等,并通過線性回歸案例和神經網絡訓練流程對其進行直觀闡釋。幫助讀者理解正則化原…

【爬蟲】deepseek談爬蟲工具

2025 年,隨著 Web 技術的演進和反爬機制的升級,工具生態也會進一步優化。以下是 2025 年爬蟲 & 自動化測試的前沿工具預測,結合行業趨勢和現有技術發展方向: 🚀 2025 年推薦組合(預測版) 1…

SQLMesh 測試自動化:提升數據工程效率

在現代數據工程中,確保數據模型的準確性和可靠性至關重要。SQLMesh 提供了一套強大的測試工具,用于驗證數據模型的輸出是否符合預期。本文將深入探討 SQLMesh 的測試功能,包括如何創建測試、支持的數據格式以及如何運行和調試測試。 SQLMesh …

Java學習手冊:Spring 中常用的注解

一、組件注解 Component :用于標記一個類為 Spring 管理的 Bean,是 Spring 的基本組件注解。Spring 會通過類路徑掃描自動檢測并注冊標記了 Component 的類為 Bean。Service :是 Component 的派生注解,用于標記服務層類&#xff…

前端跨域問題詳解:原因、解決方案與最佳實踐

引言 在現代Web開發中,跨域問題是前端工程師幾乎每天都會遇到的挑戰。隨著前后端分離架構的普及和微服務的發展,跨域請求變得愈發常見。本文將深入探討跨域問題的本質、各種解決方案以及在實際開發中的最佳實踐。 一、什么是跨域問題? 1.1…

[計算機網絡]物理層

文章目錄 物理層的概述與功能傳輸介質雙絞線:分類:應用領域: 同軸電纜:分類: 光纖:分類: 無線傳輸介質:無線電波微波:紅外線:激光: 物理層設備中繼器:放大器:集線器(Hub)&#xff1a…

大連理工大學選修課——機器學習筆記(9):線性判別式與邏輯回歸

線性判別式與邏輯回歸 概述 判別式方法 產生式模型需要計算輸入、輸出的聯合概率 需要知道樣本的概率分布,定義似然密度的隱式參數也稱為基于似然的分類 判別式模型直接構造判別式 g i ( x ∣ θ i ) g_i(x|\theta_i) gi?(x∣θi?),顯式定義判別式…

OpenCV 圖像處理核心技術 (第二部分)

歡迎來到 OpenCV 圖像處理的第二部分!在第一部分,我們學習了如何加載、顯示、保存圖像以及訪問像素等基礎知識。現在,我們將深入探索如何利用 OpenCV 提供的強大工具來修改和分析圖像。 圖像處理是計算機視覺領域的基石。通過對圖像進行各種…

【鴻蒙HarmonyOS】一文詳解華為的服務卡片

7.服務卡片 1.什么是卡片 Form Kit(卡片開發服務)提供一種界面展示形式,可以將應用的重要信息或操作前置到服務卡片(以下簡稱“卡片”),以達到服務直達、減少跳轉層級的體驗效果。卡片常用于嵌入到其他應…

探索目標檢測:邊界框與錨框的奧秘

筆者在2022年開始學習目標檢測的時候,對各種框的概念那是相當混淆,比如: 中文名詞:邊界框、錨框、真實框、預測框等英文名詞:BoundingBox、AnchorBox、Ground Truth等 同一個英文名詞比如BoundingBox翻譯成中文也有多個…

[原創](現代Delphi 12指南):[macOS 64bit App開發]: [1]如何使用原生NSAlert消息框 (runModal模式)

[作者] 常用網名: 豬頭三 出生日期: 1981.XX.XX 企鵝交流: 643439947 個人網站: 80x86匯編小站 編程生涯: 2001年~至今[共24年] 職業生涯: 22年 開發語言: C/C++、80x86ASM、Object Pascal、Objective-C、C#、R、Python、PHP、Perl、 開發工具: Visual Studio、Delphi、XCode、…

LangChain的向量RAG與MCP在意圖識別的主要區別

LangChain的向量RAG與MCP在意圖識別實現上的區別主要體現在技術路徑、流程設計以及應用場景三個方面: 1. 技術路徑差異 LangChain向量RAG 語義相似度驅動:通過用戶輸入的原始查詢與向量化知識庫的語義匹配實現意圖識別。例如,用戶提問"…

[特殊字符] Spring Cloud 微服務配置統一管理:基于 Nacos 的最佳實踐詳解

在微服務架構中,配置文件眾多、管理復雜是常見問題。本文將手把手演示如何將配置集中托管到 Nacos,并在 Spring Cloud Alibaba 項目中實現統一配置管理 自動刷新機制。 一、為什么要使用 Nacos 統一配置? 傳統方式下,每個服務都…