亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時間:2025年05月11日 10:49:19   作者:盛夏綻放  
本文詳細介紹了MySQL連接池的常用方法,包括創(chuàng)建連接池、核心方法連接對象的方法、連接池管理方法以及事務處理,同時,還提供了最佳實踐和性能提示,幫助開發(fā)者構建高效可靠的數(shù)據(jù)庫應用,需要的朋友可以參考下

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

1. 創(chuàng)建連接池

首先需要創(chuàng)建連接池實例:

const mysql = require('mysql2/promise'); // 使用Promise版本

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

2. 核心方法

2.1 pool.query(sqlString, [values])

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

2.2 pool.execute(sqlString, [values])

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

2.3 pool.getConnection()

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

3. 連接對象(Connection)方法

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

3.1 connection.query()

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

3.2 connection.execute()

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

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()

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

4. 連接池管理方法

4.1 pool.end()

  • 作用:優(yōu)雅關閉連接池
  • 示例
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();
  
  // 執(zhí)行多個操作
  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. 事件監(jiān)聽

連接池可以監(jiān)聽以下事件:

6.1 'acquire'

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

6.2 'release'

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

7. 最佳實踐

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

8. 性能提示

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

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

到此這篇關于MySQL連接池(Pool)常用方法詳解的文章就介紹到這了,更多相關MySQL連接池用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • MySQL 啟動失敗(code=exited, status=1/FAILURE)異常解決方案

    MySQL 啟動失敗(code=exited, status=1/FAILURE)異常解決方案

    在MySQL服務啟動時遇到啟動失敗問題,通過查看和分析錯誤日志文件,找到并解決了配置文件中的錯誤項,成功重啟了MySQL服務.文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-11-11
  • MySQL中常見關鍵字的用法總結

    MySQL中常見關鍵字的用法總結

    這篇文章主要為大家詳細介紹了MySQL中常見關鍵字的用法,例如GROUP BY、ORDER BY和LIMIT,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2023-09-09
  • MySQL中的?Binlog?深度解析及使用詳情

    MySQL中的?Binlog?深度解析及使用詳情

    這篇文章主要介紹了MySQL中的?Binlog?深度解析及使用詳情,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-06-06
  • MySQL聯(lián)合索引功能與用法實例分析

    MySQL聯(lián)合索引功能與用法實例分析

    這篇文章主要介紹了MySQL聯(lián)合索引功能與用法,結合具體實例形式分析了聯(lián)合索引的概念、功能、具體使用方法與相關注意事項,需要的朋友可以參考下
    2017-09-09
  • 使用keras做SQL注入攻擊的判斷(實例講解)

    使用keras做SQL注入攻擊的判斷(實例講解)

    下面小編就為大家分享一篇使用keras做SQL注入攻擊的判斷(實例講解),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • MySQL中慢SQL優(yōu)化的不同方式介紹

    MySQL中慢SQL優(yōu)化的不同方式介紹

    慢 SQL 的優(yōu)化,主要從兩個方面考慮,SQL 語句本身的優(yōu)化,以及數(shù)據(jù)庫設計的優(yōu)化,下面小編就來給大家介紹一下有哪些方式可以優(yōu)化慢 SQL吧
    2025-03-03
  • 不卸載原有mysql直接安裝mysql8.0

    不卸載原有mysql直接安裝mysql8.0

    本文主要介紹了不卸載原有mysql直接安裝mysql8.0,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • 安裝mysql出錯”A Windows service with the name MySQL already exists.“如何解決

    安裝mysql出錯”A Windows service with the name MySQL already exis

    這篇文章主要介紹了安裝mysql出錯”A Windows service with the name MySQL already exists.“如何解決的相關資料,在日常項目中此問題比較多見,特此把解決辦法分享給大家,供大家參考
    2016-05-05
  • My Sql 1067錯誤與編碼問題的解決方案

    My Sql 1067錯誤與編碼問題的解決方案

    My Sql 大部分都是用綠色版(解壓版) 然后注冊服務簡單方便,但是配置文件也很讓人糾結,下面小編給大家?guī)砹薓y Sql 1067錯誤與編碼問題的解決方案,感興趣的朋友參考下吧
    2016-11-11
  • mysql查詢結果輸出到文件的方法

    mysql查詢結果輸出到文件的方法

    下面小編就為大家?guī)硪黄猰ysql查詢結果輸出到文件的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01

最新評論