
在 Node.js 开发中,与数据库交互是非常常见的需求,而 MySQL 作为一款广泛使用的关系型数据库,与 Node.js 的结合十分紧密。本文将详细介绍如何在 Node.js 中执行 MySQL 的 SQL 查询语句,从基础的连接数据库到各种类型的 SQL 查询操作,都将通过具体的示例代码进行演示。
在开始之前,需要确保已经安装了 Node.js 和 MySQL 数据库,并且可以正常访问。同时,还需要安装 mysql2 模块,它是一个快速的 MySQL 驱动程序,支持 Promise 和回调两种方式。可以使用以下命令进行安装:
npm install mysql2
首先,我们需要创建一个数据库连接。以下是一个简单的示例代码:
const mysql = require('mysql2');// 创建连接池const pool = mysql.createPool({host: 'localhost',user: 'your_username',password: 'your_password',database: 'your_database',waitForConnections: true,connectionLimit: 10,queueLimit: 0});// 获取一个连接pool.getConnection((err, connection) => {if (err) {console.error('数据库连接失败:', err);return;}console.log('数据库连接成功');// 释放连接connection.release();});// 导出连接池module.exports = pool.promise();
在上述代码中,我们使用 mysql2 模块创建了一个连接池,并设置了相关的连接参数。通过 getConnection 方法获取一个连接,如果连接成功则打印成功信息,最后释放连接。为了方便后续使用,我们将连接池以 Promise 的形式导出。
以下是一个简单的查询示例,用于从 users 表中获取所有用户的信息:
const db = require('./db');async function selectUsers() {try {const [rows, fields] = await db.execute('SELECT * FROM users');console.log('查询结果:', rows);} catch (error) {console.error('查询出错:', error);}}selectUsers();
在上述代码中,我们定义了一个异步函数 selectUsers,使用 db.execute 方法执行 SQL 查询语句。execute 方法返回一个 Promise,通过 await 关键字等待查询结果。查询结果包含两个部分:rows 表示查询到的数据行,fields 表示查询结果的字段信息。
以下是一个插入数据的示例,向 users 表中插入一条新的用户记录:
const db = require('./db');async function insertUser() {try {const [result] = await db.execute('INSERT INTO users (name, age) VALUES (?, ?)', ['John Doe', 30]);console.log('插入成功,插入的记录 ID 为:', result.insertId);} catch (error) {console.error('插入出错:', error);}}insertUser();
在上述代码中,我们使用 ? 作为占位符,将实际的参数作为第二个参数传递给 execute 方法。这样可以避免 SQL 注入攻击。插入操作的结果包含一个 insertId 属性,表示插入记录的 ID。
以下是一个更新数据的示例,将 users 表中 ID 为 1 的用户的年龄更新为 35:
const db = require('./db');async function updateUser() {try {const [result] = await db.execute('UPDATE users SET age = ? WHERE id = ?', [35, 1]);console.log('更新成功,受影响的行数为:', result.affectedRows);} catch (error) {console.error('更新出错:', error);}}updateUser();
在上述代码中,我们使用 UPDATE 语句更新数据,并使用占位符传递参数。更新操作的结果包含一个 affectedRows 属性,表示受影响的行数。
以下是一个删除数据的示例,删除 users 表中 ID 为 1 的用户记录:
const db = require('./db');async function deleteUser() {try {const [result] = await db.execute('DELETE FROM users WHERE id = ?', [1]);console.log('删除成功,受影响的行数为:', result.affectedRows);} catch (error) {console.error('删除出错:', error);}}deleteUser();
在上述代码中,我们使用 DELETE 语句删除数据,并使用占位符传递参数。删除操作的结果同样包含一个 affectedRows 属性,表示受影响的行数。
| 操作类型 | SQL 语句示例 | Node.js 代码示例 | 结果属性 |
|---|---|---|---|
| 查询数据 | SELECT * FROM users |
const [rows, fields] = await db.execute('SELECT * FROM users'); |
rows:查询到的数据行,fields:字段信息 |
| 插入数据 | INSERT INTO users (name, age) VALUES (?, ?) |
const [result] = await db.execute('INSERT INTO users (name, age) VALUES (?, ?)', ['John Doe', 30]); |
insertId:插入记录的 ID |
| 更新数据 | UPDATE users SET age = ? WHERE id = ? |
const [result] = await db.execute('UPDATE users SET age = ? WHERE id = ?', [35, 1]); |
affectedRows:受影响的行数 |
| 删除数据 | DELETE FROM users WHERE id = ? |
const [result] = await db.execute('DELETE FROM users WHERE id = ?', [1]); |
affectedRows:受影响的行数 |
通过以上示例,我们可以看到在 Node.js 中执行 MySQL 的 SQL 查询语句非常方便。使用 mysql2 模块,我们可以轻松地连接数据库,并执行各种类型的 SQL 操作。同时,使用占位符可以有效地防止 SQL 注入攻击,提高代码的安全性。希望本文对你有所帮助!