# 连接 MySQL 步骤
- 安装操作 MySQL 数据库的第三方模块(mysql)
- 通过 mysql 模块连接到 MySQL 数据库
- 通过 mysql 模块执行 SQL 语句
# 安装 MySQL 模块
- mysql 模块是托管于 npm 上的第三方模块。它提供了在 Node.js 项目中连接和操作 MySQL 数据库的能力。
# 配置 MySQL 模块
- 在使用 mysql 模块操作 MySQL 数据库之前,必须先对 mysql 模块进行必要的配置,主要的配置步骤如下
| |
| const mysql = require('mysql') |
| |
| |
| const db = mysql.createPool({ |
| host: 'localhost', |
| |
| port: 3306, |
| |
| user: 'root', |
| |
| password: '2333', |
| |
| database: 'my_db_01' |
| }) |
具体配置参考:
Node.js 连接 MySQL | 菜鸟教程 (runoob.com)
# 测试连接是否成功
| db.query('select 0', (err, results) => { |
| |
| if (err) return console.log(err.message); |
| |
| |
| console.log(results); |
| }) |
# 连接发生的错误
cmd | ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; |
## 查询数据
| db.query(`select * from users`, (err, results, fields) => { |
| if (err) return console.log(err); |
| |
| |
| console.log(results); |
| }) |
# 插入数据
# 占位符方式
| |
| const user = { username: 'saber', password: '12345' } |
| |
| |
| const sqlStr = 'insert into users (username, password) values(?, ?)' |
| |
| |
| db.query(sqlStr, [...Object.values(user)], (err, results) => { |
| if (err) return console.log(err); |
| |
| |
| if (results.affectedRows === 1) |
| console.log('Data Is inserted successfully.'); |
| }) |
# 便携方式
- 向表中新增数据时,如果数据对象的每个属性和数据表的字段一一对应,如下方式快速插入数据:
| |
| const user = { username: '樱岛麻衣', password: 'YDMY' } |
| |
| |
| const sqlStr = 'insert into users set ?' |
| |
| |
| db.query(sqlStr, user, (err, results) => { |
| if (err) return console.log(err); |
| |
| |
| if (results.affectedRows === 1) |
| console.log('Data Is inserted successfully.'); |
| }) |
# 更新数据
# 占位符方式
| |
| const user = { username: '稚名真白', password: 'ZMZB', id: 1 } |
| |
| |
| const sqlStr = 'update users set username=?, password=? where id=?' |
| |
| |
| db.query(sqlStr, [...Object.values(user)], (err, results) => { |
| if (err) return console.log(err); |
| |
| |
| if (results.affectedRows === 1) |
| console.log('Data updated successfully.'); |
| }) |
# 便携方式
- 更新表数据时,如果数据对象的每个属性和数据表的字段一一对应,如下方式快速更新表数据
| |
| const user = { username: '稚名真白', password: 'ZMZB', id: 1 } |
| |
| |
| const sqlStr = 'update users set ? where id=?' |
| |
| |
| db.query(sqlStr, [user, user.id], (err, results) => { |
| if (err) return console.log(err); |
| |
| if (results.affectedRows === 1) |
| console.log('Data updated successfully.'); |
| }) |
# 删除数据
- 在删除数据时,推荐使用唯一标识如
id
这样的,来删除对应的数据。
| |
| const sqlStr = `delete from users where id=?` |
| |
| db.query(sqlStr, 1, (err, results) => { |
| if (err) return console.log(err); |
| |
| |
| if (results.affectedRows === 1) |
| console.log('Data deleted successfully.') |
| }) |
# 标记删除
- 使用 DELETE 语句,会把真正的把数据从表中删除掉。为了保险起见,
推荐使用
标记删除的形式,来 模拟删除的动作
。
- 所谓的标记删除,就是在表中设置类似于
status
这样的 状态字段
,来 标记
当前这条数据是否被删除。
- 当用户执行了删除的动作时,我们并没有执行 DELETE 语句把数据删除掉,而是执行了 UPDATE 语句,将这条数据对应的 status 字段标记为删除即可。
| |
| const sqlStr = 'update users set status=? where id=?' |
| |
| |
| db.query(sqlStr, [1, 1], (err, results) => { |
| if (err) return console.log(err) |
| |
| if (results.affectedRows === 1) |
| console.log('Data marker deleted successfully.'); |
| }) |