• 在node.js项目中安装配置mysql模块并进行增删改查


    在项目中安装并配置mysql模块

    一、项目中操作数据库的步骤

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

    // mysql 模块是托关于npm上的第三方模块。
    // 它提供了Node.js项目中连接和操作mysql数据库的能力。
    
    // 安装命令
    npm install mysql
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2、通过mysql模块连接到mysql数据库
    3、通过mysql模块执行sql语句

    图示:

    在这里插入图片描述

    配置mysql模块

    调用db.query()函数,指定要执行的sq语句,通过回调函数拿到执行的结果。(这里的’select 1’ 没有任何意义,就是为了测试mysql是否连接成功),只要能打印出 [ RowDataPacket { '1': 1 } ] 的结果,就证明数据库连接成功

    // 导入mysql模块
    const mysql = require('mysql');
    
    // 建立与mysql数据库连接
    const db = mysql.createPool({
        host: '127.0.0.1',        // 数据库的ip地址
        user: 'root',             // 登陆数据库的账号
        password: 'admin123',     // 登陆数据库的密码
        database: 'test_1',       // 指定要登陆哪个数据库
    });
    
    // 测试 mysql 模块是否正常工作('select 1' 没有任何意义,就是为了测试mysql是否连接成功)
    db.query('select 1', (err, res) => {
        // mysql 模块工作期间报错了
        if (err) return console.log(err.message);
    
        // 能够成功的执行 sql语句
        console.log(res);
    });
    
    app.listen(80, () => {
        console.log('Server running at http://localhost:80');
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    在这里插入图片描述

    查询数据库

    数据库结构及数据

    在这里插入图片描述

    查询user表中所有的数据:

    const express = require('express');
    const mysql = require('mysql');
    const app = express();
    
    // 建立与mysql连接
    const db = mysql.createPool({
        host: '127.0.0.1',        // 数据库的ip地址
        user: 'root',             // 登陆数据库的账号
        password: 'admin123',     // 登陆数据库的密码
        database: 'test_1',       // 指定要登陆哪个数据库
    });
    
    // 查询users表中的所有用户数据
    db.query('select * from users', (err, results) => {
        // 查询失败 
        if (err) return console.log(err.message);
        // 查询成功
        console.log(results);
    });
    
    app.listen(80, () => {
        console.log('Server running at http://localhost:80');
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    在这里插入图片描述

    向表中插入数据

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

    待执行的sql语句,其中英文?表示占位符。如果sql语句中有多个占位符,则必须使用数组为每个占位符指定具体的值。如果sql语句只有一个占位符,则可以省略数组。

    const express = require('express');
    const mysql = require('mysql');
    const app = express();
    
    // 建立与mysql连接
    const db = mysql.createPool({
        host: '127.0.0.1',        // 数据库的ip地址
        user: 'root',             // 登陆数据库的账号
        password: 'admin123',     // 登陆数据库的密码
        database: 'test_1',       // 指定要登陆哪个数据库
    });
    
    // 向users表中增加数据 userName = 'Lili', password = '123456'
    // 待执行的sql语句,其中英文?表示占位符
    const sqlStr = 'insert into users set ?';
    
    // 要插入的users表中的数据
    const user = {userName: 'Lili', password: '123456'};
    
    // 直接将数据对象当作占位符的值
    db.query(sqlStr, user, (err, results) => {
        // 添加失败
        if (err) return console.log(err.message);
        // 添加成功
        if(results.affectedRows === 1) {
           console.log('插入数据成功!');
        }
    });
    
    app.listen(80, () => {
        console.log('Server running at http://localhost:80');
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    在这里插入图片描述
    修改表中的数据

    const express = require('express');
    const mysql = require('mysql');
    const app = express();
    
    // 建立与mysql连接
    const db = mysql.createPool({
        host: '127.0.0.1',        // 数据库的ip地址
        user: 'root',             // 登陆数据库的账号
        password: 'admin123',     // 登陆数据库的密码
        database: 'test_1',       // 指定要登陆哪个数据库
    });
    
    // 更新users表中的数据,将id为8的数据,userName更新为kkk,password更新为999999
    const user = { id: 8, userName: 'kkk', password: '999999'};
    const sqlStr = 'update users set ? where id = ?';
    db.query(sqlStr, [user, user.id], (err, results) => {
        if (err) return console.log(err.message);
        if(results.affectedRows === 1) {
          console.log('更新数据成功!');
        }
    });
    
    app.listen(80, () => {
        console.log('Server running at http://localhost:80');
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    在这里插入图片描述

    删除数据

    在删除数组时,推荐根据id这个唯一标识,来删除对应的数据

    // 1、要执行的sql语句
    const sqlStr = 'delete from users where id = ?';
    
    // 2、调用db.query()执行sql语句同时,为占位符指定具体的值
    // 如果sql语句中有多个占位符,则必须使用数组为每个占位符指定具体的值
    // 如果sql语句中只有一个占位符,则可以省略数组
    
    db.query(sqlStr, 8, (err, results) => {
        if (err) return console.log(err.message);
        if(results.affectedRows === 1) {
          console.log('删除数据成功!');
        }
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    标记删除

    使用delete删除,会把数据库真正的数据删除。为了保险,推荐使用标记删除的形式,来模拟删除的动作。即在表中通过修改类似status这样的状态字段,来标记当前这条数据是否被删除。这个时候并不执行delete语句,而是执行update修改类似status这样字段的状态来做删除

    // 标记删除:使用update语句替代delete语句,只更新数据的状态,并没有真正的删除。
    
    data.query('update users set status = 1 where id = ?', 8, (err, results) => {
        if (err) return console.log(err.message);
        if(results.affectedRows === 1) {
          console.log('删除数据成功!');
        }
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  • 相关阅读:
    ETL工具— C/S 架构 为 数字基建 “安全” 保驾护航
    容器核心技术之Namespace与Cgroup
    C/C++---------------LeetCode第1207.独一无二的出现次数
    【腾讯云原生降本增效大讲堂】Caelus全场景在离线混部
    如何让WPF中的ValidationRule实现参数绑定
    huggingface中Bert模型的简单使用
    Java 简易版王者荣耀
    【CANoe】Canoe的 I/O功能-以VN1640A为例
    1、Kafka急速入门
    聊聊并发编程——并发容器和阻塞队列
  • 原文地址:https://blog.csdn.net/qq_30351747/article/details/125881077