一、安装配置 mysql 模块
1. 在 项目中操作数据库的步骤
- 安装操作 MySQL 数据库的第三方模块 (
mysql) - 通过 mysql 模块
连接到 MySQL 数据库 - 通过 mysql 模块
执行 SQL 语句
2. 安装 mysql 模块
mysql 模块是托管于 npm 上的 第三方模块。 它提供了 Node.js 项目中 连接和操作 MySQL 数据库的能力,想要在项目中使用它,需要先运行如下命令,将 mysql 安装为项目的依赖包:
npm i mysql
3. 配置 mysql 模块
在使用 mysql 模块操作 MySQL 数据库之前,必须先对 mysql 模块进行必要的配置,步骤如下:
// 导入 mysql 模块
const mysql = require('mysql');
// 建议与 MySQL 数据库的连接
const db = mysql.createPool({
host: 'X.X.X.X', // 数据库的 IP 地址
user: 'root', // 登录数据库的账号
password: '*****', // 登录数据库的密码
database: 'my_db_01', // 指定要操作哪个数据库
port: '3306'
})
4. 测试 myql 模块能否正常工作
调用 db.query() 函数,指定要执行的 SQL 语句, 通过回调函数拿到执行的结果:
// 导入 mysql 模块
const mysql = require('mysql');
// 建议与 MySQL 数据库的连接
const db = mysql.createPool({
host: 'XX.XX.XX.XX', // 数据库的 IP 地址
user: 'root', // 登录数据库的账号
password: '******', // 登录数据库的密码
database: 'my_db_01', // 指定要操作哪个数据库
port: '3306'
})
// 测试 mysql 模块是否是正常工作
db.query('select 1', (err, results) => {
// 如果有错误
if(err) return console.log(err.message, '连接失败')
// 如果没有错误
console.log(results, '连接成功')
})
二、使用 mysql 模块操作 MySQL 数据库
1. 查询数据
查询 user 表中的所有数据
// 导入 mysql 模块
const mysql = require('mysql');
// 建议与 MySQL 数据库的连接
const db = mysql.createPool({
host: 'XX.XX.XX.XX', // 数据库的 IP 地址
user: 'root', // 登录数据库的账号
password: '******', // 登录数据库的密码
database: 'my_db_01', // 指定要操作哪个数据库
port: '3306'
})
// 查询 user 表中所有的数据
let sqlStr = 'select * from my_db_01.user'
db.query(sqlStr, (err, result) => {
// 查询数据失败
if(err) return console.log(err)
// 查询数据成功,select 语句查询出来的是一个数组
console.log(result)
})
终端输出结果:
2. 插入数据
向 user 表中新增数据,其中 username 为 xxq, 密码为 528520 的数据, 代码如下:
// 导入 mysql 模块
const mysql = require('mysql');
// 建议与 MySQL 数据库的连接
const db = mysql.createPool({
host: 'XX.XX.XX.XX', // 数据库的 IP 地址
user: 'root', // 登录数据库的账号
password: '******', // 登录数据库的密码
database: 'my_db_01', // 指定要操作哪个数据库
port: '3306'
})
// 向 user 表中插入 一条 username 为 xxq, 密码为 528520 的数据
// 定义要插入的数据对象
let user = {username: 'xxy', password: '528520'};
// 定义 sql 插入数据语句, 在 sql 语句中可以用 问号表示占位符
let sqlStr = `insert into my_db_01.user (username, password) values (?,?)`
db.query(sqlStr, [user.username, user.password], (err, result) => {
if(err) return console.log(err.message, '插入数据失败')
if(result.affectedRows === 1) {
console.log('插入数据成功')
}
})
终端输出结果:
插入数据截图:
3. 插入数据的便捷方式
向表中新增数据时,如果 数据对象的每个属性 和 数据表中的字段 一 一对应, 则可以通过如下的方式快速插入数据:
// 插入数据的便捷方式
let user = {username: 'xyq', password: 'xhg123'};
let sqlStr = 'insert into my_db_01.user set ?';
// 执行 sql 语句
db.query(sqlStr, user, (err, result) => {
if(err) return console.log(err.message)
if(result.effectedRows === 1) {
console.log('插入数据成功')
}
})
4. 更新数据
可以通过如下方式,更新表中的数据:
// 导入 mysql 模块
const mysql = require('mysql');
// 建议与 MySQL 数据库的连接
const db = mysql.createPool({
host: 'XX.XX.XX.XX', // 数据库的 IP 地址
user: 'root', // 登录数据库的账号
password: '******', // 登录数据库的密码
database: 'my_db_01', // 指定要操作哪个数据库
port: '3306'
})
let user = {id: 1, username:'lmx_new', password:'528520_new'};
// 定义 sql 语句
let sqlStr = 'update my_db_01.user set username=?, password=? where id= ?';
// 执行 sql 语句
db.query(sqlStr, [user.username, user.password, user.id], (err, result) => {
if(err) return console.log(err.message);
if(result.effectedRows === 1) {
console.log('更新用户数据成功')
}
})
5. 更新数据的便捷方式
更新表数据时,如果 数据对象的每个属性 和 数据表的字段 一一对应, 则可以通过如下方式快速更新表数据:
// 导入 mysql 模块
const mysql = require('mysql');
// 建议与 MySQL 数据库的连接
const db = mysql.createPool({
host: 'XX.XX.XX.XX', // 数据库的 IP 地址
user: 'root', // 登录数据库的账号
password: '******', // 登录数据库的密码
database: 'my_db_01', // 指定要操作哪个数据库
port: '3306'
})
// 更新数据的快捷方式
let user = {id: 1, username:'xxl_001', password: '528520_001'};
// 定义 sql 语句
let sqlStr = 'update my_db_01.user set ? where id=?'
// 执行 sql 语句
db.query(sqlStr, [user, user.id], (err, result) => {
if(err) return console.log(err.message)
if(result.effectedRows === 1) {
console.log('更新数据成功')
}
})
6. 删除数据
在删除数据时,推荐根据 id 这样的唯一标识,来删除对应的数据,示例如下:
注意:
如果 SQL 语句中有 多个占位符,则必须使用 数组 来为每个占位符指定具体的值;如果 SQL 语句中 只有一个占位符,则可以省略数组
// 删除指定的数据
const sqlStr = 'delete from my_db_01.user where id=?'
// 执行 sql 语句
db.query(sqlStr, 1, (err, result) => {
if(err) return console.log(err.message);
if(result.effectedRows === 1) {
console.log('删除数据成功')
}
})
7. 标记删除
使用 DELETE 语句,会真正的把数据从表中删除掉。为了保险起见,推荐使用 标记删除 的形式,来 模拟删除数据的动作。
所谓的标记删除,就是在表中设置类似于 status 这样的 状态字段。来 标记 当前这条数据是否被删除。
当用户执行了删除的动作时, 我们并没有执行 DELETE 语句把数据删除掉,而是执行了 UPDATE 语句,将这条数据对应的 status 字段标记为删除即可。
// 标记删除
const sqlStr = 'update my_db_01.user set status=? where id=?'
db.query(sqlStr, [1, 5], (err, result) => {
if(err) return console.log(err.message);
if(result.effectedRows === 1) {
console.log('标记删除成功')
}
})
数据库截图: