Nodejs -- 数据库基本概念的介绍及在Express中操作数据库

news2024/11/24 14:41:51

文章目录

  • 1. 数据库的基本概念
    • 1.1 什么是数据库
    • 1.2 常见的数据库及分类
    • 1.3 传统型数据库的数据组织结构
      • 1.3.1 Excel的数据组织结构
      • 1.3.2 传统型数据库的数据组织结构
      • 1.3.3 实际开发中库、表、行、字段的关系
  • 2. 在Express中操作MySQL
    • 2.1 在项目中操作数据库的步骤
    • 2.2 安装与配置mysql模块
      • 2.2.1 安装ysql模块
      • 2.2.2 配置mysql模块
      • 2.2.3 测试mysql模块能否正常工作
    • 2.3 使用mysql模块操作MySQL数据库
      • 2.3.1 查询数据
      • 2.3.2 插入数据
      • 2.3.3 插入数据的便捷方式
      • 2.3.4 更新数据
      • 2.3.5 更新数据的便捷方式
      • 2.3.6 删除数据
      • 2.3.7 标记删除

1. 数据库的基本概念

1.1 什么是数据库

数据库(database)是用来组织、存储和管理数据的仓库。

当今世界是一个充满着数据的互联网世界,充斥着大量的数据

数据的来源有很多,比如出行记录、消费记录、浏览的网页、发送的消息等等。除了文本类型的数据,图像、音乐、声音都是数据。

为了方便管理互联网世界中的数据,就有了数据库管理系统的概念(简称:数据库)。用户可以对数据库中的数据进行新增、查询、更新、删除等操作。

1.2 常见的数据库及分类

市面上的数据库有很多种,最常见的数据库有如下几个:

  • MySQL数据库(目前使用最广泛、流行度最高的开源免费数据库;Community+Enterprise)
  • Oracle数据库(收费)
  • SQL Server数据库(收费)
  • Mongodb数据库(Community+Enterprise)

其中,MySQL、Oracle、.SQL Server属于传统型数据库(又叫做:关系型数据库或SQL数据库),这三者的设计理念相同,用法比较类似。

而Mongodb属于新型数据库(又叫做:非关系型数据库或NoSQL数据库),它在一定程度上弥补了传统型数据库的缺陷。

1.3 传统型数据库的数据组织结构

数据的组织结构:指的就是数据以什么样的结构进行存储。

传统型数据库的数据组织结构,与Excel中数据的组织结构比较类似。因此,我们可以对比着Excel来了解和学习传统型数据库的数据组织结构。

1.3.1 Excel的数据组织结构

每个Excel中,数据的组织结构分别为工作簿、工作表、数据行、列这4大部分组成。

  • 整个Excel叫做工作簿
  • users和books是工作表
  • users工作表中有3行数据
  • 每行数据由6列信息组成
  • 每列信息都有对应的数据类型

image-20221129141033637

1.3.2 传统型数据库的数据组织结构

在传统型数据库中,数据的组织结构分为**数据库(database)、数据表(table))、数据行(row)、字段((field)**这4大部分组成。

  • 数据库类似于Excel的工作簿
  • 数据表类似于Excel的工作表
  • 数据行类似于Excel的每一行数据
  • 字段类似于Excel的列
  • 每个字段都有对应的数据类型

1.3.3 实际开发中库、表、行、字段的关系

  • 在实际项目开发中,一般情况下,每个项目都对应独立的数据库。
  • 不同的数据,要存储到数据库的不同表中,例如:用户数据存储到usrs表中,图书数据存储到books表中。
  • 每个表中具体存储哪些信息,由字段来决定,例如:我们可以为users表设计id、username、password这3个字段。
  • 表中的行,代表每一条具体的数据,

2. 在Express中操作MySQL

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

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

image-20221129141557393

2.2 安装与配置mysql模块

2.2.1 安装ysql模块

mysql模块是托管于npm上的第三方模块。它提供了在Node,js项目中连接和操作MySQL数据库的能力。

想要在项目中使用它,需要先运行如下命令,将mysql安装为项目的依赖包:

npm i mysql # 对于mysql5.x
npm i mysql2 # 对于mysql8.x

2.2.2 配置mysql模块

// 导入mysql模块
const mysql = require('mysql')

// 建立与 MySQL数据库的连接
const db = mysql.createPool({
    host: '127.0.0.1',
    user: 'root',
    password: 'root',
    database: 'nodejs-study' // 指定操作的数据库
})

2.2.3 测试mysql模块能否正常工作

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

// 检测mysql模块能否正常工作
db.query('SELECT 1', (err, results) => {
    if (err) return console.log(err.message)

    // 如果能打印出来 [ { '1': 1 } ] 说明没有问题
    console.log(results)
})

2.3 使用mysql模块操作MySQL数据库

2.3.1 查询数据

查询users表中的所有数据

db.query('SELECT * FROM users', (err, results) => {
    if (err) return console.log(err.message)
	// 打印结果
    console.log(results)
})

如果执行的是 select 查询语句,则执行的结果是数组

image-20221129142920099

2.3.2 插入数据

插入新的用户信息

通过affectedRows判断是否插入数据成功,如果是多行的话建议使用result.affectRows != 0

const userInfo = {
    username: "sunliu",
    age: 19,
    gender: "男"
}
const sqlStr = 'INSERT INTO users VALUES (?, ?, ?)'

db.query(sqlStr, [userInfo.username, userInfo.age, userInfo.gender], (err, result) => {
    if (err) return console.log(err.message)
    // 插入数据成功
    if (result.affectedRows === 1) {
        console.log("插入数据成功")
    }
})

2.3.3 插入数据的便捷方式

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

const userInfo = {
    name: "sunliu",
    age: 19,
    gender: "男"
}
const sqlStr = 'INSERT INTO users SET ?'

db.query(sqlStr, userInfo, (err, result) => {
    if (err) return console.log(err.message)
    // 插入数据成功
    if (result.affectedRows === 1) {
        console.log("插入数据成功")
    }
})

数据库表结构:

image-20221129183324849

2.3.4 更新数据

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

const userInfo = {
    name: "sunliu",
    age: 50,
    gender: "男"
}
const sqlStr = 'UPDATE users SET age=? WHERE name=?'

db.query(sqlStr, [userInfo.age, userInfo.name], (err, result) => {
    if (err) return console.log(err.message)
    if (result.affectedRows === 1) {
        console.log("修改数据成功")
    }
})

2.3.5 更新数据的便捷方式

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

const userInfo = {
    name: "sunliu",
    age: 50,
    gender: "男"
}
const sqlStr = 'UPDATE users SET ? WHERE name=?'

db.query(sqlStr, [userInfo, userInfo.name], (err, result) => {
    if (err) return console.log(err.message)
    if (result.affectedRows === 1) {
        console.log("修改数据成功")
    }
})

2.3.6 删除数据

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

const sql = 'delete from users where id=?'
db.query(sql, id, (err, results) => {
    if (err) return console.log(err.message)
    if (result.affectedRows === 1) {
        console.log("删除数据成功")
    }
})

2.3.7 标记删除

  • 使用DELETE语句,会把真正的把数据从表中删除掉。为了保险起见,推荐使用标记删除的形式,来模拟删除的动作
  • 所谓的标记删除,就是在表中设置类似于status这样的状态字段,来标记当前这条数据是否被删除
  • 当用户执行了删除的动作时,我们并没有执行DELETE语句把数据删除掉,而是执行了UPDATE语句,将这条数据对应的status字段标记为删除即可。
db.query('update users set status=1 where id=?', 7, (err, results) => {
    if (err) return console.log(err.message)
    if (result.affectedRows === 1) {
        console.log("删除数据成功")
    }
})

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

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

相关文章

Java编程案例:买飞机票

编程案例: 一、目的 复习前半段课程学习的Java编程知识,能够使用所学的知识解决问题,提升同学们的编程能力。 二、涉及到的知识点 变量、数组。运算符:基本运算符、关系运算符、逻辑运算符…程序流程控制:if、switc…

np.meshgrid()函数

文章目录(1)自己理解(2)官方解释(3)参数:3.1 x1, x2,…, xn:array_like3.2 sparse:bool, optional 默认false3.3 copy:bool, optional(1)自己理解 np.meshgrid(a, b,indexing "xy") 函数会返回 b.shape() 行 ,a.shape() 列的二维数组。 因此 i, j 都是 …

【序列召回推荐】(task6)多兴趣召回Comirec-SA

note Comirec-SA基于attention的多兴趣建模,论文中先通过attention提取单一兴趣,再推广到多兴趣建模。另外使用贪心算法优化带有准确度多样性的目标函数。DR把MIND的attention换成argmax(还有初始化方式不同、序列胶囊到兴趣胶囊用可学习权重…

2.线性代数基础

1.矩阵 2. 特殊矩阵 正交矩阵 AATE(E为单位矩阵,AT表示“矩阵A的转置矩阵”。)或ATAE,则n阶实矩阵A称为正交矩阵 正交矩阵有如下性质: A是正交矩阵,AT也是正交矩阵A的各行是单位向量且两两正交&#xff0…

html实现ezuikit.js萤石云直播监控,ezuikit.js实时监控实现,萤石云实时监控简单实现

效果图 实现 下面的播放url获取:登录萤石云->控制台->我的资源->设备列表->列表中:查看通道->监控地址 appKey和appSecret获取:登录萤石云->控制台->我的账号->应用信息->右侧:应用密钥 下载ezuikit…

(服务器客户端)网络通信是怎么实现的?7000字爆肝----原来java网络编程技术功不可没(多线程,URL,InetAddressm,TCP,UDP)集结

👨‍💻个人主页:元宇宙-秩沅 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 秩沅 原创 收录于专栏 java ⭐java网络编程技术⭐ 文章目录⭐java网络编程技术⭐👨‍💻一,URL类…

[附源码]Python计算机毕业设计Django的4s店车辆管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

虎牙、斗鱼同道同命:共同御寒

配图来自Canva可画 回顾游戏直播行业过去十年,先是直播行业野蛮发展玩家快速跑马圈地,而后历经千播大战形成斗鱼、虎牙分天下的市场格局,现在头部平台进入精细化、多元化运作阶段,市场竞争愈加激烈。 也就是说,游戏直…

4G DTU能装4G物联网卡吗?

科技的发展日新月异,我们国家的发展战略也是支持高新科技公司的发展,所以越来越多的高新科技公司出现,但凡是高新科技公司,在设备的联网中,都会用到物联卡,所以物联卡的市场也愈发火爆,那么今天…

食物链【并查集+不知道1是A,B,C哪一类的?用x,x+n,x+n+n分别表示A,B,C中有个1】【并查集中用距离表示关系】【压缩路径】

欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录) 文章字体风格: 红色文字表示:重难点 蓝色文字表示:思…

jenkins项目构建类型 -----Pipeline流水线项目构建

壹,概念 pipeline 是一套运行在jenkins上得工作流框架,将原本运行于单个或者多个节点得任务连接起来,用来实现单个任务难以完成得复杂流程编排和可视化得工作。 贰 优点 代码持久可停止多功能可扩展 叁 如何创建Jenkins Pipeline pipeli…

计算机物联网控制|5.5常规控制方案 5.6先进控制方案

11.16日课堂作业 1.已知模拟PID算式为 试推导差分增量算式。 2.PID参数Kc、Ti、Td对系统动态特性和稳态特性有何影响? 目录 11.16日…

[附源码]计算机毕业设计springboot高校实验室仪器设备管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Telemetry原理

Telemetry是一种网络设备监控技术,提供周期采样网络设备内的统计数据和状态数据的能力。 一、Telemetry概述 1.1、技术背景: 网络设备的统一监控和性能管理是运维平台的重要功能,设备的监控数据包括数据、控制和管理平面数据。 获取设备监…

学习Python的8天

1、异常处理机制 Python 中,用try except语句块捕获并处理异常,其基本语法结构如下所示: try:可能产生异常的代码块 except [ (Error1, Error2, ... ) [as e] ]:#(e是别名,可以自己起)处理异常的代码块1 except [ (Error3, Error…

【强化学习论文合集 | 2020年合集】一. ICML-2020 强化学习论文

强化学习(Reinforcement Learning, RL),又称再励学习、评价学习或增强学习,是机器学习的范式和方法论之一,用于描述和解决智能体(agent)在与环境的交互过程中通过学习策略以达成回报最大化或实现特定目标的问题。 本专栏整理了近几年国际顶级会议中,涉及强化学习(Rein…

Workfine使用Oracle Express Edition数据库

Workfine 应用环境和工具 Win10 专业版操作系统Windows Terminaldocker desktop 4.10.1 安装设置Oracle Express Edition数据库 1、获取Oracle XE 18.4.0 docker 镜像,在 Windows Terminal 终端里执行如下命令 docker pull gvenzl/oracle-xe:18.4.0 2、下载成功…

小啊呜产品读书笔记001:《邱岳的产品手记-14》第26讲 写好产品文档的诀窍 第27讲 产品案例分析: QuartzHooked的对话式交互

小啊呜产品读书笔记001:《邱岳的产品手记-14》第26讲 写好产品文档的诀窍 & 第27讲 产品案例分析: Quartz&Hooked的对话式交互一、今日阅读计划二、泛读&知识摘录1、第26讲 写好产品文档的诀窍2、第27讲 产品案例分析: Quartz&am…

web前端-javascript-function函数(函数说明,创建和调用函数,其他方法函数声明创建函数、函数表达式创建函数)

函数 //var fun new Function("console.log(Hello 这是我的第一个函数);"); //fun();function fun2() {console.log("这是我的第二个函数");alert("哈哈哈哈");document.write("~~~~(>_<)~~~~"); }//console.log(fun2); //调用…

[附源码]计算机毕业设计springboot惠农微信小程序论文

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…