在本章中,我们将学习如何使用 mysql2 库与 MySQL 数据库进行交互。我们将涵盖安装、连接数据库、执行查询、处理事务和错误处理等关键主题。
安装 mysql2
首先,我们需要安装 mysql2 库。你可以使用 npm 来安装这个库:
npm install mysql2
创建数据库连接
一旦安装了 mysql2,我们可以开始创建数据库连接。以下是一个简单的示例:
// www.javascriptcn.com code example
const mysql = require('mysql2');
// 创建一个连接到数据库的连接池
const pool = mysql.createPool({
host: 'localhost',
user: 'yourusername',
password: 'yourpassword',
database: 'yourdatabase'
});
// 获取一个连接
pool.getConnection((err, connection) => {
if (err) throw err; // 不要忘记处理错误!
console.log('Connected to the database as id ' + connection.threadId);
});执行简单的查询
创建连接后,我们可以通过连接对象执行 SQL 查询。下面是如何执行一个简单的查询:
pool.query('SELECT 1 + 1 AS solution', function (error, results, fields) {
if (error) throw error;
console.log(results); // 输出: [ RowDataPacket { solution: 2 } ]
});处理结果集
在上面的例子中,我们已经看到了如何处理结果集。results 是一个数组,其中每个元素都是一个行数据包。我们可以根据需要进一步处理这些数据。
遍历结果集
pool.query('SELECT * FROM users', function (error, results, fields) {
if (error) throw error;
for (const row of results) {
console.log(row);
}
});插入数据
插入数据是另一个常见的操作。我们可以使用 INSERT 语句来完成这一任务。
const sql = 'INSERT INTO users (name, email) VALUES (?, ?)';
const values = ['John Doe', 'john.doe@example.com'];
pool.query(sql, values, function (error, results) {
if (error) throw error;
console.log(`Inserted ${results.affectedRows} rows`);
});更新数据
更新数据时,我们可以使用 UPDATE 语句。以下是更新用户信息的一个例子:
const sql = 'UPDATE users SET name = ?, email = ? WHERE id = ?';
const values = ['Jane Doe', 'jane.doe@example.com', 1];
pool.query(sql, values, function (error, results) {
if (error) throw error;
console.log(`Updated ${results.affectedRows} row(s)`);
});删除数据
删除数据时,我们可以使用 DELETE 语句。以下是删除用户信息的一个例子:
const sql = 'DELETE FROM users WHERE id = ?';
const id = 1;
pool.query(sql, id, function (error, results) {
if (error) throw error;
console.log(`Deleted ${results.affectedRows} row(s)`);
});处理事务
在某些情况下,我们可能需要执行一系列操作,并确保它们要么全部成功,要么全部失败。这就是事务的作用所在。我们可以使用 beginTransaction()、commit() 和 rollback() 方法来管理事务。
// www.javascriptcn.com code example
pool.beginTransaction(function(err) {
if (err) throw err;
pool.query('INSERT INTO users (name, email) VALUES (?, ?)', ['Alice Smith', 'alice.smith@example.com'], function (error, results) {
if (error) {
pool.rollback(function() {
throw error;
});
}
const userId = results.insertId;
pool.query('INSERT INTO orders (user_id, total_amount) VALUES (?, ?)', [userId, 100], function (error, results) {
if (error) {
pool.rollback(function() {
throw error;
});
}
pool.commit(function(err) {
if (err) {
pool.rollback(function() {
throw err;
});
}
console.log('Transaction committed successfully');
});
});
});
});错误处理
错误处理是任何应用程序的重要组成部分。在与数据库交互时,我们需要确保能够适当地捕获和处理错误。
pool.query('SELECT * FROM non_existent_table', function (error, results, fields) {
if (error) {
console.error(error);
} else {
console.log(results);
}
});总结
本章介绍了如何使用 mysql2 库与 MySQL 数据库进行基本的 CRUD 操作。我们从安装库开始,然后介绍了如何创建数据库连接、执行查询、处理结果集、插入、更新和删除数据,以及如何处理事务和错误。通过这些基础知识,你应该能够在你的项目中有效地使用 mysql2。