Mysql基本概念
1.什么是数据库 🤔
数据库(database)是用来组织。存储和营理数据的仓库。
当今世界是一个充满着数据的互联网世界,充斥着大量的数据。数据的来源有很多,比如出行记录、消费记录、浏览的网页、发送的消息等等.除了文本类型的数据,图像。音乐。声音都是数据。
为了方便管理互联网世界中的数据,就有了数据库管理系统的概念(简称:数据库) .用户可以对数据库中的数据进行新增、查询、更新、删除等操作。
2.常见的数据库以及分类
市面上最常见的数据库:
- MySQL数据库(目前使用最广泛流行度最高的开源免费数据库; Community(社区版免费) + Enterprise(企业版))
- Oracle数据库(收费)
- SQL Server数据库(收费)
- Mongodb数据库(Community + Enterprise)
其中,MySQL. Oracle. SQL Server 属于传统型数据库(又叫做:关系型数据库或SQL数据库),这三者的设计理念相同,用法比较类似。
而Mongodb属于新型数据库(又叫做:非关系型数据库或NoSQL数据库),它在一 定程度 上弥补了传统型数据库的缺陷。
3.传统型数据库的数据阻止结构
1.Excel的数据组织结构
每个Excel中,数据的组织结构分别为工作簿、工作表、数据行、列这4大部分组成。
- 整个Excel叫做工作簿
- users和books是工作表
- users工作表中有3行数据
- 每行数据由6列信息组成
- 每列信息都有对应的数据类型
2.传统型数据库的数据组织结构
在传统型数据库中,数据的组织结构分为**数据库(database)、数据表(table). 数据行(row)、 字段(field)**这 4大部分组成。
- 数据库类似于Excel的工作簿
- 数据表类似于Excel的工作表
- 数据行类似于 Excel的每一行数据
- 字段类似于Excel的列
- 每个字段都有对应的数据类型
3.实际开发中库、表、行、字段的关系
- 在实际项目开发中,-般情况下,每个项目都对应独立的数据库。
- 不同的数据,要存储到数据库的不同表中,例如:用户数据存储到users表中,图书数据存储到books表中。
- 每个表中具体存储哪些信息,由字段来决定,例如:我们可以为users表设计id、username、 password 这3个字段。
- 表中的行,代表每一条具体的数据。
安装并配置MySQL
了解需要安装哪些MySQL相关的软件
对于开发人员来说,只需要安装MySQL Server和MySQL Workbench这两个软件,就能满足开发的需要了。
- MySQL Server:专门用来提供数据存储和服务的软件。
- MySQL Workbench:可视化的MySQL管理工具,通过它,可以方便的操作存储在MySQL Server中的数据。
MySQL在Windows环境下的安装
跳过
使用MySQL Workbench管理数据库
1.创建数据库
2.创建数据表
DataType数据类型:
- int整数
- **varchar(len”长度“)**字符串
- **tinyint(1)**布尔值
字段的特殊标识:
- **PK (Primary Key)**主键、唯一标识
- NN (Not Null) 值不允许为空
- UQ (Unique) 值唯一
- Al (Auto Increment) 值自动增长
- Default/Expression默认值
3.向表中写入数据
什么是SQL
SQL (英文全称: Structured Query Language)是结构化查询语言,专门用来访问和处理数据库的编程语言。能够让我们以编程的形式,操作数据库里面的数据。
三个关键点:
- SQL是一门数据库编程语言
- 使用SQL语言编写出来的代码,叫做SQL语句
- SQL语言只能在关系型数据库中使用(例如MySQL、Oracle、 SQL Server)。非关系型数据库(例如Mongodb)不支持SQL语言
SQL能做什么
- 从数据库中查询数据
- 向数据库中插入新的数据
- 更新数据库中的数据
- 从数据库删除数据
- 可以创建新数据库
- 可在数据库中创建新表
- 可在数据库中创建存储过程、 视图
- ete…
SQL的学习目标
重点掌握如何使用SQL从数据表中:
查询数据(select) 、 插入数据(insert into)、更新数据(update). 删除数据 (delete)
额外需要掌握的4种SQL语法:
where条件、and和or运算符、orderby排序、count(*) 函数
SQL语法
SQL的SELECT语句
1.语法
SELECT语句用于从表中查询数据。执行的结果被存储在一个结果表中(称为结果集) 语法格式如下:
注意:SQL语句中的关键字对大小写不敏感。SELECT 等效于select, FROM 等效于from.
2.SELECT*示例
我们希望从users表中选取所有列,可以使用符号*取代列的名称,示例如下:
3.SELECT列名称示例
如需获取名为”username”和”password”的列的内容(从名为”users”的数据库表),请使用下面的SELECT语句:
SQL的INSERT INTO语句
1.语句
INSERT INTO语句用于向数据表中插入新的数据行,语法格式如下:
2.INSERT INTO示例
向users表中,插入一条username为tony stark, password 为098123的用户数据,示例如下: .
SQL的UPDATE语句
1.语句
Update语句用于修改表中的数据。语法格式如下:
2.UPDATE示例-更新某一行中的一个列
把users表中id为7的用户密码,更新为888888.示例如下:
3.UPDATE示例-更新某一行中的若干列
把users表中id为2的用户密码和用户状态,分别更新为admin123和1.示例如下: .
SQL的DELETE语句
1.语法
DELETE语句用于删除表中的行。语法格式如下:
2.DELETE示例
从users表中,删除id为4的用户,示例如下:
注意:一定要加where
SQL的WHERE子句
1.语法
WHERE子句用于限定选择的标准。在SELECT、UPDATE、DELETE 语句中,皆可使用WHERE子句来限定选择的标准。
2.可在where子句中使用的运算符
下面的运算符可在where子句中使用,用来限定选择的标准:
注意:在某些版本sql中,操作符<>可以写为!=
3.WHERE子句示例
可以通过WHERE子句来限定SELECT的查询条件:
SQL的AND和OR运算符
1.语法
AND和OR可在WHERE子语句中把两个或多个条件结合起来。
- AND表示必须同时满足多个条件,相当于JavaScript中的&&运算符,例如if(a!== 10&&a!== 20)
- OR表示只要满足任意一个条件即可. 相当于JavaScript中的II运算符,例如if(a!== 10||a!== 20)
2.AND运算符示例
使用AND来显示所有status为0,并且id小于3的用户:
3.OR运算符示例
使用OR来显示所有status为1,或者username为zs的用户:
SQL的ORDER BY子句
1.语法
- ORDER BY语句用于根据指定的列对结果集进行排序。
- ORDER BY语句默认按照升序对记录进行排序。
- 如果您希望按照降序对记录进行排序,可以使用ASC(可省略)关键字。
- 如果您希望按照降序对记录进行排序,可以使用DESC关键字。
2.OPDER BY 子句-升序排序
对users表中的数据,按照status字段进行升序排序,示例如下:
3.ORDER BY 子句-降序排序
对users表中的数据,按照id字段进行降序排序,示例如下:
4.ORDER BY子句-多重排序
对users表中的数据,先按照status字段进行降序排序,再按照username的字母顺序,进行升序排序,示例如下:
SQL的COUNT(*)函数
1.语法
COUNT()函数用于返回查询结果的总数据条数,语法格式如下:
2.COUNT(*)实例
查询users表中status为0的总数据条数:
2.使用AS为列设置别名
如果希望给查询出来的列名称设置别名,可以使用AS关键字,示例如下:
在项目中操作数据库步骤
在项目中操作mySQL的步骤
- 安装操作MySQL数据库的第三方模块(mysql)
- 通过mysql模块连接到MySQL数据库
- 通过mysql模块执行SQL语句
安装与配置musql模块
1.安装mysql模块
mysql模块是托管于npm上的第三方模块。它提供了在Node.js项目中连接和操作MySQL数据库的能力。
想要在项目中使用它,需要先运行如下命令,将mysql安装为项目的依赖包:
npm install mysql
2.配置mysql模块
在使用mysq|模块操作MySQL数据库之前,必须先对mysql模块进行必要的配置,主要的配置步骤如下:
3.测试mysql模块能否正常工作
调用db.query()函数,指定要执行的SQL语句,通过回调函数拿到执行的结果:
‘select 1’ 测试mysql这个模块能否正常工作
使用mysql模块操作mysql数据库
1.查询数据
查询users表中所有的数据:
注意:如果执行的是select查询语句,则执行的结果是数组
2.插入数据
向users表中新增数据,其中username为Spider-Man, password 为pcc321.示例代码如下:
?符号可以进行数据的占位
1 | // 向users表中新增一条数据,其中username的值为Spider-Man,password的值为pcc123 |
- 注意:如果执行的是insert into插入语句,则results是一个对象,可以通过affectedRows属性,来判断是否插入数据成功
- 注意:数据的id具有唯一性,所以添加的数据可能不是按照正确顺序添加,使用过某一id的 数据就算被删除其id也不能被替代
3.插入数据的便捷方式
向表中新增数据时,如果数据对象的每个属性和数据表的字段一一对应, 则可以通过如下方式快速插入数据:
1 | // 演示插入数据的便捷方式 |
4.更新数据
可以通过以下方法,更新表中的数据:
1 | // 1.要更新的数据对象 |
注意:执行了update语句后,执行的结果,也是一个对象,可以通过affectedRows判断是否更新成功
5.更新数据的便捷方式
更新表数据时,如果数据对象的每个属性和数据表的字段一-对应, 则可以通过如下方式快速更新表数据:
1 | // 演示更新数据的便捷方式 |
6.删除数据
在删除数据时,推荐根据id这样的唯一标识,来删除对应的数据。示例如下:
1 | // 删除id为5的用户 |
7.标记删除
使用DELETE语句,会把真正的把数据从表中删除掉。为了保险起见,推荐使用标记删除的形式,来模拟删除的动作。
所谓的标记删除,就是在表中设置类似于status这样的状态字段,来标记当前这条数据是否被删除。
当用户执行了删除的动作时,我们并没有执行DELETE语句把数据删除掉,而是执行了UPDATE语句,将这条数据对应的status字段标记为删除即可。
1 | // 标记删除 |
8.获取指定数量的数据
SELECT * FROM 表名 LIMIT 0,30;
- 获取第一个到第30个
SELECT * FROM 表名 LIMIT 30,30;
- 获取第31个到第60个
9.关键词搜索
SELECT * FROM 表名 WHERE 表头 LIKE “%关键词%”;
10.多表查询相同参数
SELECT *
FROM shopcar,goods
WHERE shopcar.goodId = goods.id AND shopcar.username=123456;SELECT *
FROM 表名1,表名2
WHERE 表名1.表头 = 表名2.表头 AND 表名1.表头=参数;
适用于你这个表中对应的id和另一个表中的数据对应,但是你又获取不到他们相同的所有数据,可以使用这个sql语句获取,而且还将其数据合并
注意:
results返回的是一个数组,要加上**results[0]**就可以获取到这个数组上的任意属性