在项目中操作 MySQL

  • 1、在项目中操作 MySQL的步骤
  • 2、安装与配置 mysql 模块
  • 1、安装 mysql 模块
  • 2、配置 mysql 模块
  • 3、测试 mysql 模块能否正常工作
  • 3、使用 mysql 模块操作 MySQL 数据库
  • 1、查询数据
  • 2、插入数据
  • 3、插入数据的便捷方式
  • 4、更新数据
  • 5、更新数据的便捷方式
  • 6、删除数据
  • 7、标记删除


1、在项目中操作 MySQL的步骤

(1)安装操作 MySQL 数据库的第三方模块(mysql)

(2)通过 mysql 模块连接到 MySQL 数据库

(3)通过 mysql 模块执行 SQL 语句

nodejs mysql in 传参 node使用mysql_数据库

2、安装与配置 mysql 模块

1、安装 mysql 模块

        Mysql 模块是托管于 npm 上的第三方模块。它提供了在 Node.js 项目中连接和操作 MySQL 数据库的能力。
想要在项目中使用它,需要先运行如下命令,将 mysql 安装为项目的依赖包:

npm install mysql

如下:

nodejs mysql in 传参 node使用mysql_node.js_02

2、配置 mysql 模块

如下图,我的MySQL 数据库中有如下数据:

nodejs mysql in 传参 node使用mysql_mysql_03

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

//导入模块
const mysql = require('mysql')
//建立与mysql数据库的联系
const db = mysql.createPool({
    host:'127.0.0.1',   //数据库的IP地址
    user:'root',        //登录数据库的账号
    password:'******',//登录数据库的密码
    database:'bear2'     //指定要操作哪个数据库
})

3、测试 mysql 模块能否正常工作

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

//测试mysql能否正常工作
db.query('SELECT 1',(err,results)=>{
    if(err) return console.log(err.message)
    //能够成功的执行SQL语句
    console.log(results)
})

测试结果为:

nodejs mysql in 传参 node使用mysql_数据_04

3、使用 mysql 模块操作 MySQL 数据库

1、查询数据

查询 student 表中所有的数据:

db.query('SELECT * FROM STUDENT',(err,results)=>{
    //查询失败
    if(err) return console.log(err.message)
    //查询成功
    console.log(results)
})

结果为:

nodejs mysql in 传参 node使用mysql_数据库_05


查询成功,且得到的结果是一个数组。

2、插入数据

        向 student表中新增数据, 其中 cname'小延'age16。示例代码如下:

//要插入到student表中的数据对象
const student = {cname:'小延',age:16}
//待执行的SQL语句,其中英文的?表示占位符
const sqlStr = 'INSERT INTO student(cname,age)VALUES(?,?)'
//使用数组的形式,依次为占位符指定具体的值
db.query(sqlStr,[student.cname,student.age],(err,results)=>{
    if(err) return console.log(err.message) //失败
    if(results.affectedRows === 1){
        console.log('插入成功') //成功
    }
})

结果为:

nodejs mysql in 传参 node使用mysql_mysql_06

打开数据库,查看数据,即:

nodejs mysql in 传参 node使用mysql_数据_07


数据插入成功。

3、插入数据的便捷方式

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

//要插入到student表中的数据对象
const student = {cid:9,cname:'小杨',age:18,class_id:1002}
//待执行的SQL语句,其中英文的?表示占位符
const sqlStr = 'INSERT INTO student SET ?'
//直接将数据对象当做占位符的值
db.query(sqlStr,student,(err,results)=>{
    if(err) return console.log(err.message) //失败
    if(results.affectedRows === 1) console.log('插入数据成功!')
})

结果为:

nodejs mysql in 传参 node使用mysql_node.js_08

打开数据库,查看数据,即:

nodejs mysql in 传参 node使用mysql_nodejs mysql in 传参_09


数据插入成功。

4、更新数据

可以通过如下方式,更新表中的数据:

//要更新的数据对象
const student = {cid: 8, cname: '小欣', age: 18, class_id: 1002}
//要执行的SQL语句
const sqlStr = 'UPDATE student SET cname=?,age=?,class_id=? WHERE cid=?'
//调用db.query()执行SQL语句的同时,使用数组依次为占位符指定具体的值
db.query(sqlStr,[student.cname,student.age,student.class_id],(err,results)=>{
    if(err) return console.log(err.message) //失败
    if(results.affectedRows === 1) {
        console.log('更新数据成功!')
    }
})

结果为:

nodejs mysql in 传参 node使用mysql_数据库_10

打开数据库,查看数据,即:

nodejs mysql in 传参 node使用mysql_数据库_11


数据更新成功。

5、更新数据的便捷方式

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

const student = {cid:1,cname:'小钰',age:17,class_id:1003}
//要执行的SQL语句
const sqlStr = 'UPDATE student SET ? WHERE cid=?'
调用db.query()执行SQL语句的同时,使用数组依次为占位符指定具体的值
db.query(sqlStr,[student,student.cid],(err,results)=>{
    if(err) return console.log(err.message) //失败
    if(results.affectedRows === 1){
        console.log('数据更新成功!')  //成功
    }
})

结果为:

nodejs mysql in 传参 node使用mysql_数据_12


打开数据库,查看数据,即:

nodejs mysql in 传参 node使用mysql_node.js_13


数据更新成功。

6、删除数据

        在删除数据时,最好根据 cid 这样的唯一标识,来删除对应的数据。示例如下:

//要执行的SQL语句
const sqlStr = 'DELETE FROM student WHERE cid=?'
//调用db.query()执行sql语句的同时,为占位符指定确定的值
db.query(sqlStr,3,(err,results)=>{
    if(err) return console.log(err.message)
    if(results.affectedRows === 1){  // 失败
        console.log('删除数据成功!') //成功
    }
})

结果为:

nodejs mysql in 传参 node使用mysql_nodejs mysql in 传参_14


打开数据库,查看数据,即:

nodejs mysql in 传参 node使用mysql_数据_15


删除数据成功。

        需要注意的是:如果SQL语句有多个占位符,则必须为每个占位符指定具体的值,如果SQL语句只有一个占位符,则可以省略数组。

7、标记删除

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

//标记删除:使用UPDATE语句代替DELETE语句;只更新数据的状态,并没有真正删除。
db.query('UPDATE student SET class_id=? WHERE cid=?',[1000,6],(err,results)=>{
    if(err) return console.log(err.message)
    if(results.affectedRows === 1){  // 失败
        console.log('标记删除成功!') //成功
    }
})

结果为:

nodejs mysql in 传参 node使用mysql_node.js_16


打开数据库,查看数据,即:

nodejs mysql in 传参 node使用mysql_node.js_17


标记删除成功。