在项目中操作MySQL数据库

  1. 安装操作MySQL数据库的第三方模块(mysql)
  2. 通过mysql模块连接到MySQL数据库
  3. 通过mysql模块执行SQL语句

安装mysql模块

mysql模块时托管于npm的第三方模块,通过终端输入下面的命令安装

npm i mysql

配置mysql模块

在使用mysql模块操作数据库之前,必须先进行必要的配置:

// 导入mysql模块
const mysql = require('mysql')

// 建立与MySQL数据库的连接
const db = mysql.createPool({
    host:'127.0.0.1',
    user:'root',
    password:'123',
    database:'test'
})

测试mysql模块是否能正常工作

调用db.query()函数,指定要执行的SQL语句,通过回调函数拿到执行的结果:

db.query('SELECT 1', (err, results) => {
    if (err) return console.log(err.message)
    // 只要能打印出[ RowDataPacket { '1': 1 } ]的结果,就说明连接正常
    console.log(results)
})

利用mysql模块进行增删改查

查询数据

// 查询users表中所有的用户数据
const sqlStr = 'SELECT * FROM users'
db.query(sqlStr, (err, results) => {
    // 查询失败
    if (err) return console.log(err.message)
    // 查询成功
    console.log(results)
})

插入数据

向users表中新增数据,其中username为sb,password为sb123,示例代码如下

// 要插入到users表中的数据对象
const user = { username:'sb', password:'sb123' }
// 待执行的SQL语句,其中英文的?代表占位符
// 占位符的作用:防止SQL注入、方便复用等
const sqlStr = 'SELECT * FROM users'
// 使用数组的形式,依次为?占位符指定具体的值
db.query(sqlStr, [user.username, user.password], (err, results) => {
    // 查询失败
    if (err) return console.log(err.message)
    // 查询成功
    // 如果执行的是insert into插入语句,则result是一个对象
    // 可以通过affectRows属性,来判断是否插入数据成功
    if (results.affectedRows === 1) {
        console.log('插入成功!')
    }
})

插入数据的便捷方式

向表中新增数据时,如果数据对象的每个属性和数据表字段一一对应,则可以通过如下方式快速插入数据:

// 要插入到users表中的数据对象
const user = { username:'sb2', password:'sb123' }
// 待执行的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('插入数据成功')
    }
})

更新数据

// 要更新的数据对象
const user = { id:1, username:'sb3', password:'sb123' }
// 待执行的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)
    // 执行了update语句之后,执行的结果也是一个对象,可以通过affectedRows判断是否成功
    if (results.affectedRows === 1){
        console.log('插入数据成功')
    }
})

更新数据的便捷方式

// 要更新的数据对象
const user = { id:1, username:'sb3', password:'sb123' }
// 待执行的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('插入数据成功')
    }
})

删除数据

在删除数据时,推荐根据id这种唯一的标识来删除

// 待执行的SQL语句,其中?代表占位符
const sqlStr = 'DELETE FROM users WHERE id=?'
// 执行SQL语句
// 如果SQL语句中有多个占位符,则需要使用数组为每个占位符指定具体的值
// 如果SQL语句中只有一个占位符,则可以省略数组
db.query(sqlStr, 7, (err, results) => {
    if (err) return console.log(err.message)
    if (results.affectedRows === 1){
        console.log('插入数据成功')
    }
})

标记删除(伪删除)

使用DELETE语句,会真正的把数据从表中删除掉,为了保险起见,推荐使用标记删除的形式,来模拟删除的动作

所谓的标记删除,就是在表中设置类似与status这样的状态字段,来标记当前这条数据是否被删除(伪删除)

当用户执行了删除的动作时,我们并没有执行DELETE语句把数据删除掉,而是执行了UPDATE语句,将这条数据对应的status字段标记为删除即可

const sqlStr = 'UPDATE users SET status=? WHERE id=?'
db.query(sqlStr, [1, 6], (err, results) => {
    if (err) return console.log(err.message)
    if (results.affectedRows === 1){
        console.log('标记删除数据成功')
    }
})
最后修改:2022 年 08 月 25 日
如果觉得我的文章对你有用,能不能v我50参加疯狂星期四