5154

Good Luck To You!

js如何连接查询MySQL数据库?代码示例与步骤详解

在现代Web开发中,JavaScript(JS)与MySQL数据库的交互是常见需求,无论是构建动态网站还是开发应用程序,查询MySQL数据库都是核心功能之一,本文将详细介绍JS如何查询MySQL数据库,包括环境搭建、连接方式、查询方法及最佳实践,帮助开发者快速上手。

js如何连接查询MySQL数据库?代码示例与步骤详解

环境准备与依赖安装

在开始之前,需要确保开发环境已配置妥当,安装Node.js,这是运行JS服务器的必要条件,根据项目需求选择合适的MySQL驱动,对于Node.js,常用的驱动有mysql2mysql,其中mysql2性能更优且支持Promise,可以通过npm安装:

npm install mysql2

确保MySQL数据库已安装并运行,创建测试数据库和表,

CREATE DATABASE test_db;
USE test_db;
CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50), email VARCHAR(50));

连接MySQL数据库

JS与MySQL的交互需要先建立连接,使用mysql2模块,可以通过以下代码创建连接:

const mysql = require('mysql2/promise');
const pool = mysql.createPool({
  host: 'localhost',
  user: 'root',
  password: 'password',
  database: 'test_db',
  waitForConnections: true,
  connectionLimit: 10,
  queueLimit: 0
});

这里使用了连接池(Connection Pool),可以有效管理数据库连接,避免频繁创建和销毁连接带来的性能损耗。

执行查询语句

连接建立后,可以通过pool.query方法执行SQL查询,查询结果可以是单条记录或多条记录,具体取决于SQL语句,以下是一些常见查询示例:

js如何连接查询MySQL数据库?代码示例与步骤详解

查询多条记录

async function getUsers() {
  try {
    const [rows] = await pool.query('SELECT * FROM users');
    console.log(rows);
  } catch (error) {
    console.error('Error fetching users:', error);
  }
}
getUsers();

pool.query返回一个数组,第一个元素是查询结果,第二个是字段信息。

查询单条记录

async function getUserById(id) {
  try {
    const [rows] = await pool.query('SELECT * FROM users WHERE id = ?', [id]);
    console.log(rows[0]);
  } catch (error) {
    console.error('Error fetching user:', error);
  }
}
getUserById(1);

使用作为参数占位符,可以有效防止SQL注入攻击。

插入、更新和删除数据

// 插入数据
async function insertUser(name, email) {
  try {
    const [result] = await pool.query('INSERT INTO users (name, email) VALUES (?, ?)', [name, email]);
    console.log('Inserted ID:', result.insertId);
  } catch (error) {
    console.error('Error inserting user:', error);
  }
}
// 更新数据
async function updateUser(id, name) {
  try {
    const [result] = await pool.query('UPDATE users SET name = ? WHERE id = ?', [name, id]);
    console.log('Affected rows:', result.affectedRows);
  } catch (error) {
    console.error('Error updating user:', error);
  }
}
// 删除数据
async function deleteUser(id) {
  try {
    const [result] = await pool.query('DELETE FROM users WHERE id = ?', [id]);
    console.log('Affected rows:', result.affectedRows);
  } catch (error) {
    console.error('Error deleting user:', error);
  }
}

处理异步与错误

数据库操作是异步的,建议使用async/await语法简化代码,务必使用try-catch捕获错误,避免程序因未处理的异常而崩溃。

关闭数据库连接

虽然连接池会自动管理连接,但在某些情况下(如服务器关闭时),需要手动释放连接:

pool.end().then(() => {
  console.log('Database pool closed.');
});

最佳实践

  1. 使用参数化查询:避免SQL注入,永远不要直接拼接SQL字符串。
  2. 合理配置连接池:根据应用负载调整连接池大小,避免资源浪费或不足。
  3. 优化查询性能:使用索引、避免SELECT *、限制返回数据量等。
  4. 日志记录:记录查询错误和执行时间,便于排查问题。

相关问答FAQs

Q1: 为什么推荐使用mysql2而不是mysql
A1: mysql2mysql的升级版,支持Promise API,代码更简洁;同时性能更好,支持更高的并发量。mysql2还提供了额外的功能,如支持预处理语句和JSON数据类型。

js如何连接查询MySQL数据库?代码示例与步骤详解

Q2: 如何处理数据库连接超时问题?
A2: 可以通过设置connectTimeout参数调整连接超时时间(默认为10秒)。

const pool = mysql.createPool({
  host: 'localhost',
  user: 'root',
  password: 'password',
  connectTimeout: 30000, // 30秒超时
  // 其他配置...
});

如果频繁出现超时,可能是数据库服务器负载过高或网络问题,建议检查服务器状态和网络连接。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2025年12月    »
1234567
891011121314
15161718192021
22232425262728
293031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
    网站收藏
    友情链接

    Powered By Z-BlogPHP 1.7.3

    Copyright Your WebSite.Some Rights Reserved.