Node.js:在项目中操作数据库

901 阅读4分钟

在项目中操作数据库的步骤

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

image.png

1.安装mysql模块

mysql模块是托管与npm上的第三方模块。它提供了在Node.js项目中连接操作MySQL数据库的能力
安装依赖包:

npm install mysql

2.配置mysql模块

在使用mysql模块操作MySQL数据库之前,必须先对mysql模块进行必要的配置,只要的配置步骤如下:

    //导入mysql模块
    const mysql = require('mysql')
    //建立与MySQL数据库的连接
    const db = mysql.createPool({
    host:'127.0.0.1' ,              //数据库的ip地址
    user:'root' ,                   //登录数据库的账号
    password: 'admin123' ,          //登录数据的密码
    database: 'my_db_01' ,          //指定要操作哪个数据库
    })
    
    //测试mysql模块是否能正常工作
    db.query('select 1',(err,results)=>{
        //mysql模块工作期间报错
        if(err) return console.log(err.message)
        //能够成功执行SQL语句
        console.log(results)
    
    })

3.通过mysql模块执行SQL语句

查询数据

执行select查询语句,返回的结果是一个数组
//查询users表中所有的数据
db.query('select * from users',(err,results)=>{
    //查询失败
    if(err) return console.log(err.message)
    //查询成功
    console.log(results)
})

插入数据

注意:如果执行的是insert into插入语句,则results是一个对象
可以通过affectRows属性,来判断是否数据插入成功
affectRows:执行此条sql语句影响的行数
//向users表中新增数据

//1.要插入到users表中的数据对象
const user = {username:'Spider-Man',password:''jrd123}
//2.待执行的SQL语句,其中英文的?表示占位符
const sqlStr = 'INSERT INTO USERS (username,password) VVALUES(?,?)'
//3. 使用数组的形式,依次为?占位符指定具体的值
db.query(sqlStr,[user.username,user.password],(err,result)=>{
    if(err) return console.log(err.message) //失败
    if(results.affectedRows === 1){console.log('插入数据成功')} //成功
        
})

插入数据的便捷方式

向表中新增数据时,如果数据对象的每个属性,和数据表的字段一一对应,则可以通过如下方
式快速插入数据:
//要插入到users表中的数据对象
const user = {username:'zs',password:'plm123'}
// 待执行的sql语句,其中英文的?表示占位符
const sqlStr = 'INSERT INTO users SET ?'
//直接将数据对象当作占位符的值
db.query(sqlStr,user,(err,results)=>{
    if(err) return console.log(err.message) //失败
    if(results.affectedRows === 1){ console.log('插入数据成功')}  //成功
})

更新数据

//1.要更新的数据对象
const user = {id:7,username:'ls',password:'lp132'}
//2.要执行的sql语句
const sqlStr = 'update users set username = ?,password = ?,where id = ?'
//3.调用db.query()执行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('更新数据成功!')} //成功
})

更新数据的便捷方式

//1.要更新的数据对象
const user = {id:7,username:'ls',password:'lp132'}
//2.要执行的sql语句
const sqlStr = 'update users set ? where id = ?'
//3.调用db.query()执行SQL语句的同时,使用数据依次为占位符指定具体的值
db.query(sqlStr,[user,user.id],(err,results)=>{
    if(err) return console.log(err.message) //失败
    if(results.affectedRows === 1){ console.log('更新数据成功!')} //成功
})

删除数据

在删除数据时,推荐根据id这样的唯一标识,来删除对应的数据。
//1.要执行的SQL语句
const sqlStr = 'delete from users where id=?'
//2.调用db.query()执行SQL语句的同时,为占位符指定具体的值
//注意:如果SQL语句中有多个占位符,则必须使用数组为每个占位符指定具体的值
//      如果SQL语句中只有一个占位符,则可以省略数组
db.query(sqlStr,7,(err,results)=>{
    if(err) return console.log(err.message) //失败
    if(results.affected === 1){ console.log('删除数据成功!')} //成功
})

标记删除(推荐)

使用delete语句,会把真正的数据从表中删除掉,为了保险起见,推荐使用标记删除的形式,
来模拟删除的动作。所谓的标记删除,就是在表中设置类似于status这样的状态字段,来标记
当前这条数据是否被删除。
当用户执行了删除的动作,我们并没有执行delete语句把语句删除掉,而是执行了update语句,把这条数据对应的status字段标记为删除即可。

//标记删除:使用update语句替代delete语句;只更新数据的状态,并没有真正的删除
db.query('update users set status = 1 where id = ?',6,(err,results)=>{
    if(err) return console.log(err.message) //失败
    if(results.affectedRows === 1){ console.log('删除数据成功!')}//成功

})