Node.js中MySQL增删改查操作及async/await处理实例分析
一、介绍
MySQL是目前使用最广泛的关系型数据库管理系统,而Node.js作为一种服务器端的运行环境,可以很好地与MySQL进行集成,实现对MySQL数据库的增删改查操作。
在Node.js中,我们可以使用MySQL官方提供的包——mysql
来访问数据库,同时结合ES7中引入的async/await
语法完成并发数据库操作的异步处理,提高程序的稳定性和效率。
二、安装和配置MySQL
在开始前,我们需要安装MySQL数据库,以下是安装MySQL的简单过程:
- 前往MySQL官网下载MySQL Community Server。
- 安装MySQL,并在过程中设置MySQL的账户名和密码。
- 安装完成后,启动MySQL服务。
启动完mysql之后,要用mysql命令进入到mysql环境,用以下命令创建一个数据库:
create database testdb;
三、安装mysql包
在Node.js中使用MySQL,需要安装相关的MySQL包——mysql
和mysql2
。
在命令行中,使用以下命令来安装:
npm install mysql mysql2
四、连接MySQL数据库
在Node.js中连接MySQL数据库,可以使用mysql
包中提供的createConnection
方法,需要传入MySQL数据库的基本信息,比如用户名、密码、主机名、端口号和数据库名称等。
以下代码演示了如何连接MySQL数据库:
const mysql = require('mysql');
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '123456',
port: 3306,
database: 'testdb'
});
connection.connect((err) => {
if (err) {
console.error('error connecting: ' + err.stack);
return;
}
console.log('connected as id ' + connection.threadId);
});
connection.end();
五、执行MySQL数据库操作
MySQL数据库的操作主要包括增删改查四种操作,使用mysql包提供的query
方法可以执行任意一种操作。
1. 查询数据
以下代码演示了如何查询MySQL数据库中的数据:
const mysql = require('mysql');
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '123456',
port: 3306,
database: 'testdb'
});
connection.connect();
const sql = 'SELECT * FROM user';
connection.query(sql, (error, results, fields) => {
if (error) throw error;
console.log('The result is:\n', results);
});
connection.end();
2. 插入数据
以下代码演示了如何向MySQL数据库中插入数据:
const mysql = require('mysql');
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '123456',
port: 3306,
database: 'testdb'
});
connection.connect();
const sql = "INSERT INTO user(name, age, email) VALUES('Tom', 18, 'tom@163.com')";
connection.query(sql, (error, results, fields) => {
if (error) throw error;
console.log('The result is:\n', results);
});
connection.end();
3. 更新数据
以下代码演示了如何更新MySQL数据库中的数据:
const mysql = require('mysql');
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '123456',
port: 3306,
database: 'testdb'
});
connection.connect();
const sql = "UPDATE user SET age=20 WHERE name='Tom'";
connection.query(sql, (error, results, fields) => {
if (error) throw error;
console.log('The result is:\n', results);
});
connection.end();
4. 删除数据
以下代码演示了如何从MySQL数据库中删除数据:
const mysql = require('mysql');
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '123456',
port: 3306,
database: 'testdb'
});
connection.connect();
const sql = "DELETE FROM user WHERE name='Tom'";
connection.query(sql, (error, results, fields) => {
if (error) throw error;
console.log('The result is:\n', results);
});
connection.end();
六、async/await处理MySQL数据库操作
async/await是ES7中引入的新特性,可以很好地处理异步回调问题。在Node.js中,我们可以结合async/await语法来并发执行多个MySQL数据库操作,实现更加高效的数据处理。
以下是一个使用async/await处理MySQL数据库操作的示例:
const mysql = require('mysql');
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '123456',
port: 3306,
database: 'testdb'
});
async function run() {
let data1 = await getDataFromTable('user');
console.log('The result of query is:\n', data1);
let data2 = await insertDataIntoTable('user', {name: 'Tom', age: 18, email: 'tom@163.com'});
console.log('The result of insert is:\n', data2);
let data3 = await updateDataInTable('user', {age: 20}, {name: 'Tom'});
console.log('The result of update is:\n', data3);
let data4 = await deleteDataFromTable('user', {name: 'Tom'});
console.log('The result of delete is:\n', data4);
}
function query(sql, values) {
return new Promise((resolve, reject) => {
connection.query(sql, values, (err, res) => {
if (err) {
reject(err);
return;
}
resolve(res);
});
});
}
async function getDataFromTable(tableName) {
const sql = `SELECT * FROM ${tableName}`;
return await query(sql);
}
async function insertDataIntoTable(tableName, data) {
const sql = `INSERT INTO ${tableName} SET ?`;
return await query(sql, data);
}
async function updateDataInTable(tableName, newData, oldData) {
const fields = [];
const values = [];
for(let key in newData) {
fields.push(`${key} = ?`);
values.push(newData[key]);
}
const whereFields = [];
const whereValues = [];
for(let key in oldData) {
whereFields.push(`${key} = ?`);
whereValues.push(oldData[key]);
}
const sql = `UPDATE ${tableName} SET ${fields.join(', ')} WHERE ${whereFields.join(' AND ')}`;
return await query(sql, [...values, ...whereValues]);
}
async function deleteDataFromTable(tableName, data) {
const fields = [];
const values = [];
for(let key in data) {
fields.push(`${key} = ?`);
values.push(data[key]);
}
const sql = `DELETE FROM ${tableName} WHERE ${fields.join(' AND ')}`;
return await query(sql, values);
}
run().then(() => {
connection.end();
}).catch((err) => {
console.error(err.stack);
connection.end();
});
在这个例子中,我们使用async function
定义了4个异步方法用于查询、插入、更新和删除MySQL数据库中的数据。在这些方法中,我们完成了对connection.query
方法的封装,以便在async/await中使用。
在run
方法中,我们使用await
关键字来调用这些方法,并实现了并发执行多个MySQL数据库操作,简化了程序的代码逻辑和维护难度。
七、总结
以上是Node.js中MySQL增删改查操作以及async/await处理实例的完整攻略,MySQL是数据持久化的重要组成部分之一,这里介绍的方法是一种较为简便和直观的处理方式。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:node.js中 mysql 增删改查操作及async,await处理实例分析 - Python技术站