Node — 第五天

1. MySQL数据库

phpstudy 数据库服务器及图形化软件 软件链接
链接:https://pan.baidu.com/s/1F8wdoMstHAJkINfDKDejsw
提取码:xl3k

数据库对于我们前端同学来说,就是一个了解。

对于不会变化的数据(省、市、县),我们可以保存到json文件中。

对于经常变化的数据,我们建议保存到数据库中。

1.1 什么是数据库

数据库 (database) 是用来组织、存储和管理数据的仓库。 当今世界是一个充满着数据的互联网世界,充斥着大量的数据。数据的来源有很多,比如出行记录、消费记录、

浏览的网页、发送的消息等等。除了文本类型的数据,图像、音乐、声音都是数据。

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

  • 增删改查
    • 新增
    • 删除
    • 修改
    • 查询

1.2 常见的数据库及分类

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

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

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

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

1.3 MySQL简介

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品

我们常说数据库,其实只是一个泛指。那么数据库的结构是怎样的呢?

  • 数据库服务器
    • 数据库(一般来说,一个项目,都会使用一个独立的数据库)
      • 数据表(真正存储数据的地方)
        • 行与列(每一行代表一条数据。列又叫做字段)

在这里插入图片描述

真正存储数据的是数据表。数据表和我们见过的Excel表格结构基本相同。

数据表的结构和excel一模一样。

id(不允许重复)nameagesextel
1王宇2313200008888
2王宇2313300008888
3裴志博2518866669999

2 安装MySQL

MySQL 服务器软件 ---- 存储数据,可以创建数据库、数据表

MySQL图形化管理工具 — 可以使用它管理(创建、增删改查等等)数据库

2.1 安装MySQL服务软件

安装wampserver

安装过程,略

2.2 安装操作MySQL的图形化工具(Navicat)

图形化的管理工具,有很多种

  • mysql-workbeach(英文版,没有中文版)
  • Navicat

前面已经安装了MySQL软件。那么我们如何管理或者说使用它呢,对于我们来说,还需要安装一个管理MySQL的工具,它就是 Navicat

MySQL服务和图形化工具的关系

在这里插入图片描述

安装过程略,但要记住你的安装目录。

破解:将补丁中的 “navicat.exe” 复制到你的安装目录中,覆盖原理的文件即可

3 Navicat使用

3.1 连接到MySQL服务器

在这里插入图片描述

在这里插入图片描述

3.2 创建数据库

在这里插入图片描述
在这里插入图片描述

3.3 创建数据表

比如创建一个学生信息表:

id(不允许重复)nameagesextel
1王宇2313200008888
2王宇2413300008888
3裴志博2518866669999

对于一张表,最重要的是表头的设计

对于数据库中的数据表,最重要的设计也是表头,只不过在数据库中把表头叫做字段

名(表头)类型长度不是null其他
idint🗝勾选自动递增
namevarchar10
ageint
sexchar1
  • id – 自动递增 – √

  • 最后保存,填表名 student

  • 其他补充点

    • 数据库中的数字类型
      • tinyint -128~127
      • smallint -65535 ~ 65535
      • int -21亿 ~ 21亿
      • bigint 更大
    • 数据库中的字符串类型
      • varchar - 变长字符串类型
      • char - 定长字符串类型

3.4 导入导出数据表

  • 导出

    • 在数据表名字上,比如 student 上,右键 --> 转储SQL文件 --> 结构和数据,选择保存位置保存即可。
  • 导入

    • 在数据库名上面 --> 右键 --> 运行SQL文件 --> 选择SQL文件,运行即可完成导入。
    • 导入注意事项,表名不能重复。

SQL语句(重点)

SQL(英文全称:Structured Query Language)是结构化查询语言,专门用来访问和处理数据库的编程语言。

三个关键点

  1. SQL 是一门数据库编程语言
  2. 使用 SQL 语言编写出来的代码,叫做 SQL 语句
  3. SQL 语言只能在关系型数据库(例如 MySQL、Oracle、SQL Server)中使用。非关系型数据库(例如 Mongodb) 不支持 SQL 语言

SQL能做什么

  • 从数据库中查询数据
  • 向数据库中插入新的数据
  • 更新数据库中的数据
  • 从数据库删除数据
  • 可以创建新数据库
  • 可在数据库中创建新表
  • 可在数据库中创建存储过程、视图
  • etc…

4. 数据查询

语法格式:

  • SQL语句,不区分大小写。
-- 基本的查询语法
SELECT 字段1,字段2,... FROM 表名
select 字段,字段,.... from 表名-- 查询所有的字段
SELECT * FROM 表名-- 带条件的查询
SELECT * FROM 表名 [WHERE 条件] [ORDER BY 排序字段[, 排序字段]] LIMIT [开始位置,]长度.....

4.1 基本查询

格式: select 字段名1, 字段名2,… from 表名

案例1: 查询所有英雄的姓名和昵称

select name,nickname from heroes

案例2: 查询全部英雄的全部信息

select * from heroes

4.2 带where子句的查询

select field1, field2… from 表名 查询表中的所有数据

where 可以使用条件来筛选查询出的结果

在这里插入图片描述

-- 查询id小于10的英雄
-- select * from heroes where 条件
-- select * from heroes where id<10-- 查询id小于20的女英雄
-- select * from heroes where id<20 and sex='女'-- 查询年龄大于等于20小于等于30的英雄
-- select * from heroes where age>=20 and age<=30
-- select * from heroes where age between 20 and 30

4.3 模糊查询

通配符:

  • %: 代表任意长度(包括0)的任意字符

  • _: 代表1位长度的任意字符

like: 在执行模糊查询时,必须使用like来作为匹配条件

-- 查询名字中带有 “斯” 的英雄
-- select * from heroes where name like '%斯%'-- 查询名字的最后一个字是 “斯” 的英雄
-- select * from heroes where name like '%斯'-- 查询名字中带有 “斯” ,并且要求 “斯”前面只能有一个字的英雄
select * from heroes where name like '_斯%'

4.34 统计查询

  • max 查询最大值 select max(age) from heroes
  • Min 查询最小值 select min(age) from heroes
  • avg 查询平均值 select avg(age) from heroes
  • sum 查询总和(查询所有英雄的年龄之和) select sum(age) from heroes
  • count 查询总记录数(查询共计有多少个英雄) select count(*) cc from heroes
-- 查询所有英雄中年龄最大的的年龄
-- select max(age) from heroes-- 查询所有英雄中年龄最小的的年龄
-- select min(age) from heroes-- 查询所有英雄年龄的平均值
-- select avg(age) from heroes-- 查询所有英雄的年龄之和
-- select sum(age) from heroes-- 查询共计有多少个英雄
-- select count(*) from heroes-- 查询共计有多少英雄,用cc表示
-- select count(*) cc from heroes

4.4 查询结果排序

order by 可以对查询结果按某个字段进行升序或者降序排列

  • 升序 asc (默认值)
  • 降序 desc

可进行排序的字段通常是 整型 英文字符串型 日期型 (中文字符串也行,但一般不用)

-- select * from heroes order by 排序字段 asc/desc
-- asc 默认值,可以省略,表示升序
-- desc,表示降序-- 查询所有的英雄,按年龄升序排序
-- select * from heroes order by age asc
-- select * from heroes order by age-- 查询所有的英雄,按年龄降序排序
-- select * from heroes order by age desc-- 查询所有的英雄,先按年龄降序排序;如果年龄相同的,再按id降序排序
-- select * from heroes order by age desc, id desc-- 查询年龄大于50岁的英雄,并按年龄降序排序
select * from heroes where age>50 order by age desc

注意:如果SQL语句中,有where和order by,where一定要放到order by之前

4.5 限制查询结果

limit 用来限制查询结果的起始点和长度

  • 格式: limit start, length
    • start: 起始点。 查询结果的索引,从0开始。 0代表第一条数据。如果省略start,则默认表示从0
    • length: 长度
-- 查询所有英雄中前5个英雄
-- select * from heroes limit 起始位置, 长度
-- select * from heroes limit 0, 5
-- select * from heroes limit 5-- 查询所有英雄中,第6到10个英雄
-- select * from heroes limit 5, 5-- 查询年龄最大的3个英雄
-- select * from heroes order by age desc limit 3-- 查询年龄最大的3个女英雄
select * from heroes where sex='女' order by age desc limit 3

注意:where、order by、limit如果一起使用,是有顺序的,where在最前面、其次是order by、limit要放到最后。另外三者之间没有and之类的

4.6 小结

  • 控制查询的列数
    • select 字段, 字段, … from heroes ---- 选择查询指定的列
    • select * from heroes ---- 查询所有的列
  • 控制查询的行数
    • where 条件
      • where id>3
      • where id>3 and age<30
      • where id<3 or sex=‘男’
      • where name like ‘%斯%’
    • order by 字段 排序规则
      • order by age asc
      • order by age desc
    • limit 起始位置, 长度
      • limit 0, 3 相当于 limit 3
      • limit 3, 3

select 字段 from 表名 [where 条件] [order by 排序字段 排序规则] [limit 起始位置,长度]

select count(*) as total from 表名 – 查询总记录数

5. 添加数据

基本的格式: insert into 表名 …

方式一:指定字段和值,只要字段和值对应即可。和顺序无关

insert into heroes (字段, 字段, ...) values (,, ...)
insert into heroes (nickname, age, name) values ('虚空恐惧', 98, '科加斯')

方式二:和顺序有关,因为没指定字段,所以值必须是所有的值,而且顺序和表中字段的顺序要一致

insert into heroes values (null, '拉克丝', '光辉女郎', '女', 28)

方式三:使用set里设置新数据的值,没有顺序关系

insert into heroes set 字段=, 字段=, ....
insert into heroes set name='李青', nickname='盲僧'

6. 修改数据

格式:

update 表名 set 字段1=值1, 字段2=值2,... where 修改条件

修改表中的哪一条(几条)数据的 字段1=值1…

不指定修改条件会修改所有的数据

-- 加条件修改
update heroes set age=28, skill='在地上打滚' where id=19
-- 如果不指定条件,则会修改所有的行
update heroes set sex='妖'

7. 删除数据

格式: delete from 表名 where 删除条件

注意:不指定条件将删除所有数据

-- delete from heroes where id=19
-- 不加条件,将删除所有的数据,危险操作
-- delete from heroes

drop table stu; – 删除stu表

drop database heroes – 删除库,加入反引号可以防止出现问题,否则MySQL可能会将70当做关键字或其他意思解释

小结

  • 添加
    • insert into 表名 set 字段=值, 字段=值, 字段=值, …
  • 更新
    • update 表名 set 字段=值, 字段=值, 字段=值 where 条件
  • 删除
    • delete from 表名 where 条件

8. node中的mysql模块

8.1 mysql模块的作用

mysql模块是一个第三方模块,专门用来操作MySQL数据库。 可以执行增删改查操作。

# 如果前面没有安装过其他模块,需要先初始化
npm i mysql

curd: 就代表数据库的增删改查

c: create 就是添加 (增)

u: update 就是修改 (改)

r: read 就是查询 (查)

d: delete 就是删除 (删)

8.2 mysql模块的使用步骤

在Node中使用MySQL模块一共需要5个步骤:

  1. 加载 MySQL 模块

  2. 创建 MySQL 连接对象

  3. 连接 MySQL 服务器

  4. 执行SQL语句

  5. 关闭链接

// 1. 加载mysql模块
const mysql = require('mysql');
// 2. 创建连接对象(设置连接参数)
const conn = mysql.createConnection({// 属性:值host: 'localhost',port: 3306,user: 'root',password: '',database: 'yingxiong'
});// 3. 连接到MySQL服务器
conn.connect();// 4. 完成查询(增删改查)
/*
conn.query(SQL语句, [SQL中占位符的值], (err, result, fields) => {err: 错误信息result: 查询结果fields: 当前查询过程中涉及到的字段信息,一般用不着
});
*/// 5. 关闭连接,释放资源
conn.end();

8.3 基本的增删改查

基本的查询

执行查询类型的SQL语句,查询结果(result)是一个数组,数组的每个单元是对象,每个对象就是一条记录,对象的属性是数据表的字段名


// 1. 加载mysql
const mysql = require('mysql');// 2. 创建连接对象(填写连接参数)
const conn = mysql.createConnection({host: 'localhost',port: 3306,user: 'root',password: '',database: 'yingxiong',multipleStatements: true // 表示可以一次性执行多条SQL
})// 3. 连接到MySQL服务器
conn.connect();// 4. 完成查询
// conn.query(SQL语句, 给占位符的值, 回调函数);/// 4.1 基本的查询
conn.query('select * from heroes limit 2', (err, result) => {if (err) throw err;console.log(result);
});// 5. 关闭连接
conn.end();

执行增删改语句

要完成增删改操作,只需要将SQL语句换成增删改语句即可

对于增删改语句,返回的result是一个表示SQL执行结果的对象。其主要属性如下:

  • insertId 添加时有该属性,表示新增数据的id
  • affectedRows 受影响行数,表示受影响的行数。增删改的时候都有该属性
  • changRows 改变的行数,修改操作的时候,会有该属性

// 1. 加载mysql
const mysql = require('mysql');// 2. 创建连接对象(填写连接参数)
const conn = mysql.createConnection({host: 'localhost',port: 3306,user: 'root',password: '',database: 'yingxiong',multipleStatements: true // 表示可以一次性执行多条SQL
})// 3. 连接到MySQL服务器
conn.connect();// 4. 完成查询
// conn.query(SQL语句, 给占位符的值, 回调函数);/// 4.2 增删改
conn.query('delete from heroes where id = 1', (err, result) => {if (err) throw err;console.log(result);
});// 5. 关闭连接
conn.end();

8.4 占位符模式的增删改查

什么是占位符

SQL中的“?” 就是占位符。比如

  • select * from heroes where id > ?
  • insert into heroes set ?
  • update heroes set ? where id = ?
  • delete from heroes where id = ?

如何为占位符传值

当SQL语句中使用了占位符,则query方法需要使用参数2为这些占位符传递实际的值。并且不同的 “?” 需要的值格式也不同。具体要符合下面三种要求:

  1. SQL中有 1 个占位符,则query方法的第二个参数设置为一个值

  2. SQL中有 多 个占位符,则query方法的第二个参数设置为数组,数组中的值按顺序分别传递给每个占位符

  3. SQL中,如果 字段=值,字段=值...使用 “?” 站位了,则需为这个 “?” 传递一个对象,形式如下:

    let val = {// 字段: 值name: '压缩',nickname: '疾风剑豪',// 其他...
    }
    

有占位符的增删改查

// 例子一:查询id小于3的英雄
let sql = 'select * from heroes where id < ?';
conn.query(sql, 3, (err, result) => {if (err) throw err;console.log(result);
});
// 例子二:查询id小于3的女英雄
let sql = 'select * from heroes where id < ? and sex = ?';
conn.query(sql, [3, '女'], (err, result) => {if (err) throw err;console.log(result);
});
// 例子三:SQL中的 "字段=值, 字段=值..."的位置使用了一个占位符,则需为该占位符传递一个对象
// 如果SQL语句中有  字段=值, 字段=值, ....  可以使用一个 ? 表示;并且要为这个问号传递一个对象
let sql = 'insert into heroes set ?';
let values = {// 字段: 值name: '艾克',nickname: '时间刺客',age: 34
};
conn.query(sql, values, (err, result) => {if (err) throw err;// console.log(result);if (result.affectedRows > 0) {console.log('添加成功,最新添加的id为:' + result.insertId);} else {console.log('添加失败');}
});
// 例子四:
// SQL中有两个占位符,所以要传递一个数组
// 第1个问号表示 “字段=值, 字段=值...”,所以为这个问号传递一个对象
let sql = 'update heroes set ? where id = ?';
let values = {skill: '时光倒流',sex: '男'
}
conn.query(sql, [values, 36], (err, result) => {if (err) {console.log('修改失败');} else {console.log('修改成功');}
});

在这里插入图片描述

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

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

相关文章

iOS10 权限访问崩溃

手机升级了 iOS10 Beta&#xff0c;然后用正在开发的项目 装了个ipa包&#xff0c;发现点击有关 权限访问 直接Crash了&#xff0c;并在控制台输出了一些信息&#xff1a; This app has crashed because it attempted to access privacy-sensitive data without a usage descr…

Node — 第六天(前后端分离)及(身份验证)

综合应用服务端知识点搭建项目 下载安装所需的第三方模块 npm init -y npm i express cors mysql # express 用于搭建服务器 # cors 用于解决跨域 # mysql 用于操作数据库# 后面用到什么&#xff0c;再下载创建app.js 之前&#xff0c;我们开启一个服务器&#xff0c;js文件…

继承上机作业

1、实现如下类之间的继承关系&#xff0c;并编写Music类来测试这些类 2、编写一个Java应用程序&#xff0c;该程序包括3个类&#xff1a;Monkey类、People类和主类E。要求&#xff1a; (1) Monkey类中有个构造方法&#xff1a;Monkey (String s)&#xff0c;并且有个public voi…

ApplePay集成教程

Apple Pay运行环境&#xff1a;iPhone6以上设备&#xff0c;操作系统最低iOS9.0以上&#xff0c;部分信息设置需要iOS9.2以上。目前还不支持企业证书添加。 环境搭建好后可以在模拟器上面运行&#xff0c;xcode7.2.1iPhone6SP9.2系统下&#xff0c;系统会绑定几种虚拟的银行卡…

Node — 第七天 (大事件项目接口实现一)

关于JS错误处理 node中和mysql中的错误处理 node和MySQL提供的方法&#xff0c;已经对错误信息进行了封装&#xff0c;只需要使用 err.message 即可获取到错误信息。 比如&#xff1a; const fs require(fs); // 读取一个不存在的文件 fs.readFile(abcd.txt, (err, data) …

1.Consul 简介和环境搭建

1.什么是 Consul Consul 是 service mesh(服务网格)的一个解决方案&#xff0c;它提供了诸如服务发现&#xff0c;配置和隔离等功能的一整套控制平面(control plane)。开发人员可以根据需要单独使用这些功能点&#xff0c;也可以将他们整合成为一个完整的service mesh。Consul …

Node — 第八天 (大事件项目接口实现二)

如何处理MySQL的错误 MySQL的错误信息&#xff0c;可以通过err来获取。这是没有问题的。 但是&#xff0c;我们加入了Promise&#xff0c;Promise中的错误&#xff0c;在外部是获取不到的&#xff0c;只能使用Promise相关方法来获取错误信息。 解决方法一 使用 JS原生的 tr…

在local模式下的spark程序打包到集群上运行

一、前期准备 前期的环境准备&#xff0c;在Linux系统下要有Hadoop系统&#xff0c;spark伪分布式或者分布式&#xff0c;具体的教程可以查阅我的这两篇博客&#xff1a; Hadoop2.0伪分布式平台环境搭建 Spark2.4.0伪分布式环境搭建 然后在spark伪分布式的环境下必须出现如下八…

APS系统对制造企业到底有多重要?看完这5点你就明白了

第一个问题&#xff1a;需要APS吗&#xff1f; APS是否重要&#xff0c;不能从其所体现的软件工具或系统角度来说&#xff0c;而应该从业务角度来说。对于制造工厂和车间的运行而言&#xff0c;计划是核心的业务。就如同那句俗话说的&#xff0c;没有规矩不成方圆&#xff0c;领…

Node — 第九天 (大事件项目接口实现三)

文章管理接口 设计数据表 添加文章接口 编写接口&#xff0c;使用postman模拟提交formdata类型的数据 在article.js 中&#xff0c;加入 /add 路由 postman模拟提交formdata类型的数据 multer处理文件上传 下载安装multer 加载模块 const multer require(multer) 配置上…

Node — 第九天 (ES6降级 and 发布属于自己的[第三方模块]包)

ES6降级处理 因为 ES 6 有浏览器兼容性问题&#xff0c;可以使用一些工具进行降级处理&#xff0c;例如&#xff1a;babel 降级处理 babel 的使用步骤 安装 Node.js命令行中安装 babel配置文件 .babelrc运行命令&#xff0c;完成降级 项目初始化 (项目文件夹不能有中文) npm …

Vue — 第一天(极速入门)

基本介绍 vue是什么 目标&#xff1a;了解vue的一些基础概念。 官方网站&#xff1a; https://cn.vuejs.org/ vue是&#xff1a;渐进式javascript框架。 两组概念 &#xff08;1&#xff09;框架 库。只提供一些API给开发者使用。jquery 是一个js库框架。拥有自己的规则和…

Vue — 第二天(v-model和过滤器)

VUE-02-v-model和过滤器 昨日反馈与回顾 代码仓库的问题 不要修改你克隆下来的仓库中任意代码&#xff0c;否则&#xff0c;下次pull时&#xff0c;可能会报错&#xff0c;从而得到不到最新的代码。 如果已经遇到了这个冲突&#xff1a; 解决冲突(git 中解决冲突)把关键代码…

牛人iOS开发系列--音频播放、录音、视频播放、拍照、视频录制

概览 随着移动互联网的发展&#xff0c;如今的手机早已不是打电话、发短信那么简单了&#xff0c;播放音乐、视频、录音、拍照等都是很常用的功能。在iOS中对于多媒体的支持是非常强大的&#xff0c;无论是音视频播放、录制&#xff0c;还是对麦克风、摄像头的操作都提供了多套…

Vue — 第三天(计算属性和json-server)

计算属性 使用场景 如果一个结果需要依赖data中的数据&#xff0c;但是需要经过一些逻辑处理&#xff0c;才能得到你想要的数据。此时就可以使用计算属性。 例如&#xff1a;要对给定的字符串做翻转处理之后再来显示。 <div id"app"><!-- 此处逻辑复杂 …

Vue — 第四天(components组件)

问题导入 下面的代码是一个折叠面板的效果。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Docu…

iOS开发常用的RGB色值和宏

iOS中RGB常用的色值,同时可将对颜色的设置定义成宏,方便开发应用,如: // name 颜色相关 // 参数格式为&#xff1a;0xFFFFFF #define kColorWithRGB(rgbValue) \ [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16)) / 255.0 \ …

防火墙综合实验

防火墙技术综合实验 一、实验目的&#xff1a;本次实验是将多种访问控制列表以及防火墙部分的知识做一个汇总 二、实验内容 A&#xff1a;Established控制列表 拓扑图 配置步骤 1:配置各端口ip地址&#xff0c;配置登陆密码 R4: 登陆账号&#xff1a;ys 密码&#xff1a;123 2:…

iOS获取当前设备型号等信息总结 包含iPhone7和iPhone7P

#include <sys/types.h> #include <sys/sysctl.h>//获得设备型号(NSString *)getCurrentDeviceModel {int mib[2];size_t len;char *machine;mib[0] CTL_HW;mib[1] HW_MACHINE;sysctl(mib, 2, NULL, &len, NULL, 0);machine malloc(len);sysctl(mib, 2, mac…

Vue — 第五天(路由)

前端路由 问题导入 在前面完成的资产管理案例中&#xff0c; 我们是把列表区域和添加表单区域实现在了一个区域。当页面功能比较复杂时&#xff0c;我们需要它们拆分开来&#xff1a;一个页面中只显示一个区域。 一个比较直观的解决方案是把它们分别做成两个独立的网页文件&…