Node.js - 在项目中操作 MySQL
在项目中操作数据库的步骤
- 安装操作 MySQL 数据库的第三方模块(mysql)
- 通过 mysql 模块连接到 MySQL 数据库
- 通过 mysql 模块执行 SQL 语句
安装与配置 mysql 模块
-
安装 mysql 模块
mysql 模块是托管于 npm 上的第三方模块。它提供了在 node.js 项目中连接和操作 MySQL 数据库的能力
npm install mysql
-
配置 mysql 模块
在使用 mysql 模块操作 MySQL 数据库之前,必须先对 mysql 模块进行必要的配置,具体步骤
-
1.导入 mysql 模块
-
2.建立与 MySQL 数据库的连接
// 导入 mysql 模块 const mysql = require('mysql') // 建立 MySQL 数据库的连接关系 const db = mysql.createPool({ // 数据库 IP 地址 host:'127.0.0.1', // 登录数据库的账号 user:'root', // 登录数据库的密码 password:'admin123', // 指定要操作哪个数据库 database:'my_db_01' })
-
-
检测 mysql 模块能否正常工作
调用
db.query()
函数,指定要执行的 SQL 语句,通过回调函数拿到执行结果// 测试 mysql 模块能否正常工作 db.query('select 1', (err, results) => { if (err){ // mysql 模块工作期间报错了 return console.log(err.message) } // 能够成功执行 SQL 语句 console.log(results) })
log:
使用 mysql 模块操作 MySQL 数据库
当前数据库表中数据
查询数据
-
如果执行的是
select
查询语句,则执行的结果是数组 -
示例
查询 users 表中所有数据
const sqlStr = 'select * from users' db.query(sqlStr, (err, results) => { if(err){ return console.log(err) } console.log(results) })
log:
[ RowDataPacket { id: 1, username: '孙悟空', password: '111111', status: '0' }, RowDataPacket { id: 2, username: '猪八戒', password: '222222', status: '0' } ]
插入数据
-
如果执行的是
insert into
插入语句,则执行的结果是个对象。可以通过affectedRows
属性,来判断是否插入数据成功 -
示例
向 users 表中插入数据,其中 username 为 唐僧, password 为 333333
// 新建一个 user 对象 const user = {username:'唐僧', password:'333333'} // 要执行的 SQL 语句,其中英文的 ? 表示占位符 const sqlStr = 'insert into users (username, password) values(?,?)' // 使用数组的形式,依次为 ?占位符指定具体的值 db.query(sqlStr, [user.username, user.password], (err, results) => { if(err){ return console.log(err.message) } if (results.affectedRows === 1) { console.log('插入数据成功') } })
log:
-
插入数据的便捷方式
向表中新增数据时,如果数据对象的每个属性和数据表的字段一一对应,可以通过
set ?
的方式快速插入数据const sqlStr = 'insert into users set ?'
-
示例
向 users 表中插入数据,其中 username 为 沙僧, password 为 444444
// 新建一个 user 对象 const user = {username:'沙僧', password:'444444'} // 要执行的 SQL 语句,其中英文的 ? 表示占位符 const sqlStr = 'insert into users set ?' // 执行 SQL 语句 db.query(sqlStr, user, (err, results) => { if(err){ return console.log(err.message) } if (results.affectedRows === 1) { console.log('插入数据成功') } })
更新数据
-
如果执行的是
update
插入语句,则执行的结果是个对象。可以通过affectedRows
属性,来判断是否更新数据成功 -
示例
更新数据,将原数据库 id 为 1 的对象中,username 更新为 齐天大圣, password 更新为 aaaaaa
// 定义要更新的 user 对象 const user = {id:1, username:'齐天大圣', password:'aaaaaa'} // 要执行的 SQL 语句,其中英文的 ? 表示占位符 const sqlStr = 'update users set username=?, password=? where id=?' // 执行 SQL 语句 db.query(sqlStr, [user.username, user.password, user.id], (err, results) => { if(err){ return console.log(err.message) } if (results.affectedRows === 1) { console.log('更新数据成功') } })
log:
-
更新数据的便捷方式
更新表中数据时,如果数据对象的每个属性和数据表的字段一一对应,可以通过
set ?
的方式快速插入数据const sqlStr = 'update users set ?'
-
示例
更新数据,将原数据库 id 为 2 的对象中,username 更新为 天蓬元帅, password 更新为 bbbbbb
// 定义要更新的 user 对象 const user = {id:2, username:'天蓬元帅', password:'bbbbbb'} // 要执行的 SQL 语句,其中英文的 ? 表示占位符 const sqlStr = 'update users set ? where id=?' // 执行 SQL 语句 db.query(sqlStr, [user, user.id], (err, results) => { if(err){ return console.log(err.message) } if (results.affectedRows === 1) { console.log('更新数据成功') } })
log:
删除数据
-
在删除数据时,根据
id
这样的唯一标识,删除对应的对象 -
如果执行的是
delete
插入语句,则执行的结果是个对象。可以通过affectedRows
属性,来判断是否更新数据成功 -
示例
删除 id 为 3 的 user 对象
// 要执行的 SQL 语句,其中英文的 ? 表示占位符 const sqlStr = 'delete from users where id=?' // 执行 SQL 语句 db.query(sqlStr, 3, (err, results) => { if(err){ return console.log(err.message) } if (results.affectedRows === 1) { console.log('删除数据成功') } })
log:
标记删除
-
使用
delete
语句,会把真正的数据从表中删除掉。为了保险起见,推荐使用标记删除的形式,来模拟删除的动作 -
所谓的标记删除,就是在表中设置类似于
status
状态的字段,来标记当前这条数据是否被删除。当用户执行了删除动作时,并没有执行delete
语句把数据删除掉,而是执行了update
语句,将这条数据对应的status
字段标记为删除即可 -
示例
使用
update
语句替代delete
语句,只更新数据的状态,并没有真正的删除数据// 要执行的 SQL 语句,其中英文的 ? 表示占位符 const sqlStr = 'update users set status=? where id=?' // 执行 SQL 语句 db.query(sqlStr, [1, 4], (err, results) => { if(err){ return console.log(err.message) } if (results.affectedRows === 1) { console.log('标记删除数据成功') } })
log:
转载自:https://juejin.cn/post/7087865169648287758