express操作mysql数据库的方法总结

news2024/11/24 4:03:27

作为前端,我们无需去考虑数据库的问题,业务场景需要的话,我们可以mock数据,满足暂时的联调场景。但是对于数据库,我们前端可以不用,却不能不了解不懂。所以这篇文章整理下,nodejs框架express中怎么使用mysql这样的数据库。提升我们处理业务能力的水平!!!

安装mysql

1.硬安装,就是到mysql官网下载.exe安装包(window系统),mac自行百度哈
2.项目里面安装

npm i mysql
"dependencies": {
    "body-parser": "^1.20.2",
    "cors": "^2.8.5",
    "ejs": "^3.1.9",
    "express": "^4.19.2",
    "mysql": "^2.18.1"
  }

在这里插入图片描述

封装

const mysql = require("mysql");

const db = mysql.createPool({
  host: "127.0.0.1",
  user: "root",
  password: "",
  database: "expressapp",
});

module.exports = db;

database:数据库的名称,我们新建的表都放在这个库里,其他的字段见名知意

建库

这里大家可以选择图形化界面,也可以用cmd命令行,看个人习惯

我这里用的ideal自带的数据库可视化界面,大家可以自由发挥
在这里插入图片描述
在这里插入图片描述

联调开发

常见业务就是增删改查,所以我们分别来看看怎么在express里面操作

const db = require("../db/index");
//插入数据1
 const user = { username: "spider-man", password: "456789" };
 const sqlStr2 = "insert into tb_users (username,password) values (?,?)";
 db.query(sqlStr2, [user.username, user.password], (err, data) => {
   if (err) return console.log(err.message);
   if (data.affectedRows === 1) {
     console.log("插入成功");
   }
});

//插入数据2  快速插入
 const user = { username: "hot-man", password: "987123" };
 const sqlStr2 = "insert into tb_users set ?";
 db.query(sqlStr2, user, (err, data) => {
   if (err) return console.log(err.message);
   if (data.affectedRows === 1) {
     console.log("插入成功");
   }
});

//删除数据,会真正删除数据,硬删除
 const sqlStr4 = "delete from tb_users where id = ?";
 db.query(sqlStr4, 7, (err, data) => {
   if (err) return console.log(err.message);
   if (data.affectedRows === 1) {
     console.log("删除成功");
   }
 });
 
//标记删除,只是模拟删除,数据还在数据库,软删除
const sqlStr5 = "update tb_users set status = ? where id = ?";
db.query(sqlStr5, [1, 9], (err, data) => {
  if (err) return console.log(err.message);
  if (data.affectedRows === 1) {
    console.log("删除成功");
  }
});

//更新数据1

 const user = { id: 7, username: "aaa", password: "654321" };
 const sqlStr3 = "update tb_users set username = ? ,password = ? where id = ?";
 db.query(sqlStr3, [user.username, user.password, user.id], (err, data) => {
   if (err) return console.log(err.message);
   //执行update语句也是返回一个对象
   if (data.affectedRows === 1) {
     console.log("修改成功");
   }
  });

//更新数据2--快捷方式
 const user = { id: 7, username: "sam1", password: "123456" };
 const sqlStr3 = "update tb_users set ? where id = ?";
 db.query(sqlStr3, [user, user.id], (err, data) => {
   if (err) return console.log(err.message);
   //执行update语句也是返回一个对象
   if (data.affectedRows === 1) {
     console.log("修改成功");
   }
 });

//查询数据
 const sqlStr = "select * from tb_users";
 db.query(sqlStr, (err, data) => {
   if (err) return console.log(err.message);
   console.log("🚀 ~ db.query ~ data:", data);
 });

一顿猛操作之后的数据库结果:

在这里插入图片描述

最后总结

列出下mysql数据库操作常见的命令行方式

show databases ;

use expressapp;

show tables ;

//选择所有数据
select  * from tb_users;

//选择特定字段的数据
select  id,username,status from  tb_users;

//插入新数据
insert into tb_users  (username, password) values ('zs','11111'),('lusi','456123');
;

//更新字段
update  tb_users set password='6565665',status = 1  where  id =  5;


//删除记录
delete  from tb_users where  id = 4 or 5;


select  * from tb_users where  id > 7;

select  * from tb_users where  username != 'jack';

select *
from tb_users where  id  = 7 or id =8;


select  * from tb_users  order by  status desc, username asc;


select  count(*) from tb_users where  status = 0;

select count(*) as total  from tb_users;

select username as user1,password  from tb_users;

这样,我们就在express这样的服务端框架里,实现了真实数据的处理,离大前端又近了一步!!_

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1583365.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[闲聊统计]之参数估计是什么?(上)

参数估计是推断统计的重要内容之一。它是在抽样及抽样分布的基础上,根据样本统计量来推断所关心的总体参数。说白了,就是用样本信息来代替总体信息 例如:现在要调查某大学大学生的一个消费情况,假设全校大学生的平均消费金额为 μ…

pycharm一直打不开

一直处在下面的页面,没有反应 第一种方案: 以管理员身份运行 cmd.exe;在打开的cmd窗口中,输入 netsh winsock reset ,按回车键;重启电脑;重启后,双击pycharm图标就能打开了&#xf…

[lesson17]对象的构造(上)

对象的构造(上) 对象的初始化 从程序设计的角度,对象只是变量,因此: 在栈上常见对象时,成员变量初始为随机值在堆上创建对象时,成员变量初始为随机值在静态存储区创建对象时,成员变量初始为0值 生活中的对…

fast_bev 学习笔记

目录 一. 简述二. 输入输出三. github资源四. 复现推理过程4.1 cuda tensorrt 版 训练修改图像数 一. 简述 原文:Fast-BEV: A Fast and Strong Bird’s-Eye View Perception Baseline FAST BEV是一种高性能、快速推理和部署友好的解决方案,专为自动驾驶车载芯片设计…

langchain 使用本地通义千问

langchian 使用已经下载到本地的模型,我们使用通义千问 显存:24G 模型:qwen1.5-7B-Chat,qwen-7B-Chat 先使用 qwen-7B-Chat,会报错用不了: 看了下是不支持这中模型,但看列表中有一个 Qwen 字样…

三种常见webshell工具的流量特征分析

又来跟师傅们分享小技巧了,这次简单介绍一下三种常见的webshell流量分析,希望能对参加HW蓝队的师傅们有所帮助。 什么是webshell webshell就是以asp、php、jsp或者cgi等网页文件形式存在的一种代码执行环境,主要用于网站管理、服务器管理、…

基于SSM+Jsp+Mysql的快递管理系统

开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包…

如何将PHP的Webman框架打包成二进制文件运行

看了看webman的官方文档,发现居然还能打包为二进制,这样太厉害了吧! 先执行这个 composer require webman/console ^1.2.24 安装这个console的包,然后 执行 php webman build:bin 8.1 结果谁想到它报错提示: 好…

Spring Boot 切面的一种的测试方法,java中级开发面试

void afterReturnName() { Assertions.assertEquals(studentController.getNameById(123L).getName(), "测试姓名Yz");} } 但往往切面中的逻辑并非这么简单,在实际的测试中其实我们也完成没有必要关心在切面中到底发生了什么(发生了什么应该在…

49 样式迁移【李沐动手学深度学习v2课程笔记】

1. 样式迁移(Style Transfer) 计算机视觉的应用之一,将样式图片中的样式(比如油画风格等)迁移到内容图片(比如实拍的图片)上,得到合成图片 可以理解成为一个滤镜,但相对于滤镜来讲…

leetcode之35 搜索插入位置

文章目录 每日碎碎念一、题目要求及测试点35 搜索插入位置测试点提示 二、题解自己上手正经题解暴力法二分法之优化了一下逻辑 三、总结 每日碎碎念 苦痛生活继续 hello LeetCode,今天还是数组二分专项刷题… 一、题目要求及测试点 35 搜索插入位置 给定一个排序…

力扣HOT100 - 239. 滑动窗口最大值

解题思路&#xff1a; class Solution {public int[] maxSlidingWindow(int[] nums, int k) {if(nums.length 0 || k 0) return new int[0];Deque<Integer> deque new LinkedList<>();int[] res new int[nums.length - k 1];// 未形成窗口for(int i 0; i <…

Spring boot 入门 ---(一),2024年最新java进阶训练营

spring-snapshots http://repo.spring.io/snapshot spring-milestones http://repo.spring.io/milestone spring-boot-starter-parent是使用Spring Boot的一种不错的方式&#xff0c;但它 并不总是最合适的。有时你可能需要继承一个不同的父POM&#xff0c;或只是不喜欢我…

JRT高效率开发

得益于前期的基础投入&#xff0c;借助代码生成的加持&#xff0c;本来计划用一周实现质控物维护界面&#xff0c;实际用来四小时左右完成质控物维护主体&#xff0c;效率大大超过预期。 JRT从设计之初就是为了证明Spring打包模式不适合软件服务模式&#xff0c;觉得Spring打包…

c# list/task/ dictionary/委托简单到高级使用

在 C# 编程中&#xff0c;List、Task、Dictionary 和委托&#xff08;Delegates&#xff09;是常用的数据结构和功能特性&#xff0c;它们在处理集合、异步编程、键值对存储以及事件和回调实现中扮演着重要角色。 C# List List<T> 是 C# 中的一个泛型集合&#xff0c;它…

MySQL基础(下)

函数 函数 是指一段可以直接被另一段程序调用的程序或代码 字符串函数 SELECT 函数(参数); --concat 连接 select concat(Hello , MySQL);--lower 将所有大写转换为小写 select lower(Hello); --upper 将所有小写转换为大写 select upper(Hello);--lpad 左填充 select lpad(0…

从零开始学习的ai教程视频,如何入手?

个人认为小白想零基础学习ai应该从理论和实操两个方面入手。理论是支撑实践的前提&#xff0c;只有以一种全局观角度了解ai才能实现从熟练使用ai到有自我意识的用ai创作。 接下来将会简单介绍一些理论免费学习网站和软件&#xff08;一笔带过&#xff0c;不重点&#xff09;&a…

刷题之动态规划-回文串

前言 大家好&#xff0c;我是jiantaoyab&#xff0c;开始刷动态规划的回文串类型相关的题目 动态规划5个步骤 状态表示 &#xff1a;dp数组中每一个下标对应值的含义是什么>dp[i]表示什么状态转移方程&#xff1a; dp[i] 等于什么1 和 2 是动态规划的核心步骤&#xff0c;…

OneForAll安装使用

OneForAll简介 OneForAll是一款功能强大的子域收集工具 原项目地址&#xff1a;GitHub - shmilylty/OneForAll: OneForAll是一款功能强大的子域收集工具 gitee项目地址&#xff1a;OneForAll: OneForAll是一款功能强大的子域收集工具 # 安装Python Windows系统安装python参…

C++ //练习 11.23 11.2.1节练习(第378页)中的map以孩子的姓为关键字,保存他们的名的vector,用multimap重写此map。

C Primer&#xff08;第5版&#xff09; 练习 11.23 练习 11.23 11.2.1节练习&#xff08;第378页&#xff09;中的map以孩子的姓为关键字&#xff0c;保存他们的名的vector&#xff0c;用multimap重写此map。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09;…