当前位置:首页 > 文章列表 > 数据库 > MySQL > node和mysql的CURD总结

node和mysql的CURD总结

来源:SegmentFault 2023-01-22 09:50:12 0浏览 收藏

知识点掌握了,还需要不断练习才能熟练运用。下面golang学习网给大家带来一个数据库开发实战,手把手教大家学习《node和mysql的CURD总结》,在实现功能的过程中也带大家重新温习相关知识点,温故而知新,回头看看说不定又有不一样的感悟!

导语:之前做过一个小项目,其中用到了node和mysql,现在就结合这两者做一个使用操作总结。CURD是数据库技术中的缩写词,代表创建(Create)、更新(Update)、读取(Retrieve)和删除(Delete)操作,用于处理数据等操作。

目录

  • 前期准备
  • 实战演练
  • 方法总结

前期准备

安装php环境

  • 手动安装

建议阅读本博客另一篇文章《win10手动配置php开发环境教程》

  • 集成环境安装

可以使用这几个集成包:

PHPStudy
LNMP
XAMPP
wampserver
appserv

安装node环境

nodejs官网上面下载然后安装,一步一步的安装好了以下,查询下那个版本。

在这里插入图片描述

实战演练

本小节通过一个商品的增删改查来展示如何使用node来连接mysql进行各种操作。

node准备

  • 安装依赖包

$ mkdir demo
$ cd demo
$ npm init
$ npm install express --save
$ npm install -g express-generator
$ npm install pm2 -g
$ npm install supervisor
  • 启动node服务

编写启动脚本

// index.js
const express = require('express');
const app = express();
const port = 3000;
const db = require('./mysql');

app.get('/', (req, res) => {
    res.send('Hello,demo!');
})

app.listen(port, () => {
    console.log('Server is running on port ', port + '!');
})

// package.json
{
  "name": "demo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "dev": "node index.js"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.17.1",
    "mysql": "^2.18.1",
    "supervisor": "^0.12.0"
  }
}

启动脚本

$ npm run start
# 或者
$ supervisor index.js

mysql准备

建立一个名叫

$ mysql -h 127.0.0.1 -P 3306 -u demo -p
# 输入密码后回车确认
Enter password: 

连接成功后如下所示:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 455
Server version: 5.7.26 MySQL Community Server (GPL)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 
  • sql语句操作

-- 建立demo用户
mysql> CREATE USER 'demo'@'127.0.0.1' IDENTIFIED BY 'demo123456.';

-- 建立demo数据库
mysql> CREATE DATABASE demo;

-- 赋予用户demo操作数据库demo的权限
mysql> GRANT ALL PRIVILEGES ON demo.* TO 'demo'@'127.0.0.1';
FLUSH PRIVILEGES;

-- 创建数据表
mysql> CREATE TABLE `goods` (
  `id` int(11) NOT NULL COMMENT 'id',
  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT '名称',
  `number` int(11) NOT NULL COMMENT '数量',
  `price` int(11) NOT NULL COMMENT '价格',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='商品表';

node连接mysql

  • 安装依赖包

终于到了最关键的一步,首先安装mysql依赖包。回到

$ npm install mysql
  • 编写mysql文件

// mysql.js
const mysql = require('mysql');

const connection = mysql.createConnection({
    host: '127.0.0.1',
    user: 'demo',
    password: 'demo123456.',
    database: 'demo'
});

connection.connect(function (err) {
    if (err) {
        console.error(`error connecting: ${err.stack}`);
        return;
    }
    console.log(`Mysql is connected! 连接id: ${connection.threadId}`);
});

module.exports = db;
  • 导入mysql

引入

// index.js
const db = require('./mysql');

运行成功后的截图:

在这里插入图片描述

curd操作

以下操作均在

mysql> SELECT * FROM `goods`;

// 查询商品信息
app.get('/goods', (req, res) => {
    let result = {};
    db.query('SELECT * FROM `goods`', function (error, results, fields) {
        if (error) {
            result = {
                code: 101,
                msg: 'get_fail',
                data: {
                    info: "查询失败!"
                }
            }
        };
        result = {
            code: 200,
            msg: 'get_succ',
            data: {
                info: "查询成功!",
                list: results
            }
        }
        res.json(result);
    });
})

在地址栏输入

mysql> INSERT INTO `goods`(`name`, `number`, `price`) VALUES ('香蕉', 8, 10);

注意:添加商品是

$ npm install body-parser

引入index.js文件。

// index.js
// 添加商品
// 引入body-parser
const bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json());

app.post('/goods', (req, res) => {
    let result = {};
    let params = req.body;
    let names = '',values = '';
    for (const key in params) {
        names += '`'+ key + '`,';
        if (key == 'name') {
            values += `"${params[key]}",`;
        } else {
            values += `${params[key]},`;
        }
    }
    names = names.slice(0, names.length-1);
    values = values.slice(0, values.length-1);
    db.query('SELECT id FROM `goods` WHERE name= "' + params.name + '"', function (error, results, fields) {
        if (error) {
            result = {
                code: 101,
                msg: 'get_fail',
                data: {
                    info: "查询失败!"
                }
            }
        };
        if (results && results.length) {
            result = {
                code: 200,
                msg: 'get_succ',
                data: {
                    info: "商品已存在!"
                }
            }
            return res.json(result);
        }
        db.query('INSERT INTO `goods`(' + names + ') VALUES (' + values + ')', function (error, results, fields) {
            if (error) {
                result = {
                    code: 101,
                    msg: 'save_fail',
                    data: {
                        info: "添加失败!"
                    }
                }
            };
            result = {
                code: 200,
                msg: 'save_succ',
                data: {
                    info: "添加成功!",
                    des: {
                        id: results[0].insertId
                    }
                }
            }
            return res.json(result);
        });
    });
    
})

打开

mysql> UPDATE `goods` SET `number` = 15, `price` = 12 WHERE `id` = 1;

下面就修改一下那个苹果的数量为15,价格为9.9。

// 修改商品信息
app.put('/goods', (req, res) => {
    let result = {};
    let params = req.body;
    if (!params.id) {
        return res.json({
            code: 101,
            msg: 'get_fail',
            data: {
                info: "id不能为空!"
            }
        })
    }
    db.query('SELECT id FROM `goods` WHERE `id` = ' + params.id, function (error, results, fields) {
        if (error) {
            result = {
                code: 101,
                msg: 'get_fail',
                data: {
                    info: "查询失败!"
                }
            }
        };
        if (results && results.length == 0) {
            result = {
                code: 200,
                msg: 'get_succ',
                data: {
                    info: "商品不存在!"
                }
            }
            return res.json(result);
        }
        db.query('UPDATE `goods` SET `number` = ' + params.number + ', `price` = ' + params.price + ' WHERE `id` = ' + params.id, function (error, results, fields) {
            if (error) {
                result = {
                    code: 101,
                    msg: 'save_fail',
                    data: {
                        info: "修改失败!"
                    }
                }
            };
            result = {
                code: 200,
                msg: 'save_succ',
                data: {
                    info: "修改成功!"
                }
            }
            return res.json(result);
        });
    });
    
})

在这里插入图片描述
  • 删除商品

如果商品卖完了,或者不卖了,可以下架商品,那这里直接删除这个商品的信息。

删除需要用到的语句格式大致为

mysql> DELETE FROM `goods` WHERE `id` = 1;

下面就删除一下那个苹果商品。

// 删除商品
app.delete('/goods', (req, res) => {
    let result = {};
    let params = req.body;
    if (!params.id) {
        return res.json({
            code: 101,
            msg: 'get_fail',
            data: {
                info: "id不能为空!"
            }
        })
    }
    db.query('SELECT id FROM `goods` WHERE `id` = ' + params.id, function (error, results, fields) {
        if (error) {
            result = {
                code: 101,
                msg: 'get_fail',
                data: {
                    info: "查询失败!"
                }
            }
        };
        if (results && results.length == 0) {
            result = {
                code: 200,
                msg: 'get_succ',
                data: {
                    info: "商品不存在!"
                }
            }
            return res.json(result);
        }
        db.query('DELETE FROM `goods` WHERE `id` = ' + params.id, function (error, results, fields) {
            if (error) {
                result = {
                    code: 101,
                    msg: 'get_fail',
                    data: {
                        info: "删除失败!"
                    }
                }
            };
            result = {
                code: 200,
                msg: 'get_succ',
                data: {
                    info: "删除成功!"
                }
            }
            return res.json(result);
        });
    });
    
})

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0wSD8EDE-1625142244984)(/img/nm-08.png)]

方法总结

经过刚才的实战,相信你对curd已经很熟悉了,下面就简单封装一个查询的方法。

// simple.js
const simple = (sql, params = null) => {

    var connection = mysql.createConnection(dbConfig);

    return new Promise(function (resolve, reject) {

        connection.connect();
        console.log('Database is connected!');

        connection.query(sql, params, (err, result) => {
            if (err) {
                reject({
                    code: 102,
                    msg: 'get_fail',
                    data: {
                        info: '查询失败!',
                        detail: {
                            errno: err.errno,
                            sqlMessage: err.sqlMessage,
                            sql: err.sql
                        }
                    }
                });
            } else {
                resolve({
                    code: 200,
                    msg: 'get_succ',
                    data: {
                        info: '查询成功!',
                        data: result
                    }
                });
            }
        })

        connection.end();
        console.log('Database is disconnected!');

    })
}

使用方法:

app.get('/goods/test', async (req, res) => {
    let data = await simple('SELECT * FROM `goods`');
    return res.json(data);
});

这里推荐一个依赖包,这个可以生成mysql语句。

$ npm install xqsql

xqsql npm地址

具体使用方法,点击地址有文档介绍。

这样就比较方便点,也看着直观。

好了,今天的总结就到这里,有什么疑问,请邮箱联系我。

文中关于mysql的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《node和mysql的CURD总结》文章吧,也可关注golang学习网公众号了解相关技术文章。

版本声明
本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
B-Tree、B+Tree以及B-link TreeB-Tree、B+Tree以及B-link Tree
上一篇
B-Tree、B+Tree以及B-link Tree
MySQL 常见面试题/知识点总结!(2021 最新版)|  JavaGuide
下一篇
MySQL 常见面试题/知识点总结!(2021 最新版)| JavaGuide
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    542次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    508次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    497次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    484次学习
查看更多
AI推荐
  • 笔灵AI生成答辩PPT:高效制作学术与职场PPT的利器
    笔灵AI生成答辩PPT
    探索笔灵AI生成答辩PPT的强大功能,快速制作高质量答辩PPT。精准内容提取、多样模板匹配、数据可视化、配套自述稿生成,让您的学术和职场展示更加专业与高效。
    9次使用
  • 知网AIGC检测服务系统:精准识别学术文本中的AI生成内容
    知网AIGC检测服务系统
    知网AIGC检测服务系统,专注于检测学术文本中的疑似AI生成内容。依托知网海量高质量文献资源,结合先进的“知识增强AIGC检测技术”,系统能够从语言模式和语义逻辑两方面精准识别AI生成内容,适用于学术研究、教育和企业领域,确保文本的真实性和原创性。
    20次使用
  • AIGC检测服务:AIbiye助力确保论文原创性
    AIGC检测-Aibiye
    AIbiye官网推出的AIGC检测服务,专注于检测ChatGPT、Gemini、Claude等AIGC工具生成的文本,帮助用户确保论文的原创性和学术规范。支持txt和doc(x)格式,检测范围为论文正文,提供高准确性和便捷的用户体验。
    28次使用
  • 易笔AI论文平台:快速生成高质量学术论文的利器
    易笔AI论文
    易笔AI论文平台提供自动写作、格式校对、查重检测等功能,支持多种学术领域的论文生成。价格优惠,界面友好,操作简便,适用于学术研究者、学生及论文辅导机构。
    37次使用
  • 笔启AI论文写作平台:多类型论文生成与多语言支持
    笔启AI论文写作平台
    笔启AI论文写作平台提供多类型论文生成服务,支持多语言写作,满足学术研究者、学生和职场人士的需求。平台采用AI 4.0版本,确保论文质量和原创性,并提供查重保障和隐私保护。
    34次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码