在 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 注入攻击,提高代码的安全性。希望本文对你有所帮助!