MySQL连接池(Pool)常用方法详解

2025-05-11 14:50

本文主要是介绍MySQL连接池(Pool)常用方法详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《MySQL连接池(Pool)常用方法详解》本文详细介绍了MySQL连接池的常用方法,包括创建连接池、核心方法连接对象的方法、连接池管理方法以及事务处理,同时,还提供了最佳实践和性能提示,帮助开发者构...

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(sqlStjavascriptring, [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()China编程

  • 作用:优雅关闭连接池
  • 示例
await pool.end(); // 关闭所有连接

4.2 pool.escape(value)

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

4.3 pool.escapeIdwww.chinasem.cn(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);
});

7. 最佳实践

  1. 总是使用参数化查询防止SQL注入
  2. 及时释放连接避免连接泄漏
  3. 合理设置连接池大小根据应用负载调整
  4. 事务中使用try-catch确保正确处理错误
  5. 考虑使用ORM如Sequelize、TypeORM简化复杂操作

8. 性能提示

  • 对于高频查询,使用execute()query()更高效
  • 批量操作考虑使用连接池的单个连接
  • 长时间不用的连接池应该调用end()关闭

这些方法涵盖了MySQL连接池的绝大多数使用场景,合理使用可以构建高效可靠的数据库应用。

到此这篇关于MySQL连接池(Pool)常用方法详解的文章就介绍到这了,更多相关MySQL连接池用法内容请搜索编程China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持China编程(www.chinasem.cn)!

这篇关于MySQL连接池(Pool)常用方法详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1154562

相关文章

Java Jackson核心注解使用详解

《JavaJackson核心注解使用详解》:本文主要介绍JavaJackson核心注解的使用,​​Jackson核心注解​​用于控制Java对象与JSON之间的序列化、反序列化行为,简化字段映射... 目录前言一、@jsonProperty-指定JSON字段名二、@JsonIgnore-忽略字段三、@Jso

MySQL中隔离级别的使用详解

《MySQL中隔离级别的使用详解》:本文主要介绍MySQL中隔离级别的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录引言undo log的作用MVCC的实现有以下几个重要因素如何根据这些因素判断数据值?可重复读和已提交读区别?串行化隔离级别的实现幻读和可

Python解决雅努斯问题实例方案详解

《Python解决雅努斯问题实例方案详解》:本文主要介绍Python解决雅努斯问题实例方案,雅努斯问题是指AI生成的3D对象在不同视角下出现不一致性的问题,即从不同角度看物体时,物体的形状会出现不... 目录一、雅努斯简介二、雅努斯问题三、示例代码四、解决方案五、完整解决方案一、雅努斯简介雅努斯(Janu

通过C#获取Excel单元格的数据类型的方法详解

《通过C#获取Excel单元格的数据类型的方法详解》在处理Excel文件时,了解单元格的数据类型有助于我们正确地解析和处理数据,本文将详细介绍如何使用FreeSpire.XLS来获取Excel单元格的... 目录引言环境配置6种常见数据类型C# 读取单元格数据类型引言在处理 Excel 文件时,了解单元格

9个SpringBoot中的自带实用过滤器使用详解

《9个SpringBoot中的自带实用过滤器使用详解》在SpringBoot应用中,过滤器(Filter)是处理HTTP请求和响应的重要组件,SpringBoot自带了许多实用的过滤器,如字符编码,跨... 目录1. CharacterEncodingFilter - 字符编码过滤器功能和配置手动配置示例2

Spring Boot Controller处理HTTP请求体的方法

《SpringBootController处理HTTP请求体的方法》SpringBoot提供了强大的机制来处理不同Content-Type​的HTTP请求体,这主要依赖于HttpMessageCo... 目录一、核心机制:HttpMessageConverter​二、按Content-Type​处理详解1.

MySQL索引失效问题及解决方案

《MySQL索引失效问题及解决方案》:本文主要介绍MySQL索引失效问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql索引失效一、概要二、常见的导致MpythonySQL索引失效的原因三、如何诊断MySQL索引失效四、如何解决MySQL索引失

Spring Boot 常用注解详解与使用最佳实践建议

《SpringBoot常用注解详解与使用最佳实践建议》:本文主要介绍SpringBoot常用注解详解与使用最佳实践建议,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录一、核心启动注解1. @SpringBootApplication2. @EnableAutoConfi

Android与iOS设备MAC地址生成原理及Java实现详解

《Android与iOS设备MAC地址生成原理及Java实现详解》在无线网络通信中,MAC(MediaAccessControl)地址是设备的唯一网络标识符,本文主要介绍了Android与iOS设备M... 目录引言1. MAC地址基础1.1 MAC地址的组成1.2 MAC地址的分类2. android与I

mysql递归查询语法WITH RECURSIVE的使用

《mysql递归查询语法WITHRECURSIVE的使用》本文主要介绍了mysql递归查询语法WITHRECURSIVE的使用,WITHRECURSIVE用于执行递归查询,特别适合处理层级结构或递归... 目录基本语法结构:关键部分解析:递归查询的工作流程:示例:员工与经理的层级关系解释:示例:树形结构的数