数据库基础知识
数据库概述
什么是数据库?
数据库:DataBase(DB),是存储和管理数据的仓库。
数据库管理系统:DataBase Management System(DBMS),操纵和管理数据库的大型软件。
SQL:Structured Query Language,操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准。
数据库产品
产品名 | 简介 |
---|---|
Oracle | 收费的大型数据库,Oracle公司的产品。 |
MySQL | 开源免费的中小型数据库。Sun公司收购了MySQL,Oracle收购Sun公司。 |
SQL Server | MicroSoft公司收费的中型的数据库。C#、.net等语言常使用。 |
PostgreSQL | 开源免费中小型的数据库。 |
DB2 | IBM公司的大型收费数据库产品。 |
SQLite | 嵌入式的微型数据库。如:作为Android内置数据库 |
MariaDB | 开源免费的中小型的数据库。 |
MySQL概述
MySQL安装
下载安装包地址
https://dev.mysql.com/downloads/mysql/
去安装这一个 “Windows (x86, 64-bit), ZIP Archive”
解压
下载完成后我们得到的是一个压缩包,将其解压,我们就可以得到MySQL 8.0.34 的软件本体了(就是一个文件夹),我们可以把它放在你想安装的位置 。
配置
添加环境变量
环境变量里面有很多选项,这里我们只用到Path
这个参数。为什么在初始化的开始要添加环境变量呢?
在黑框(即CMD)中输入一个可执行程序的名字,Windows会先在环境变量中的Path
所指的路径中寻找一遍,如果找到了就直接执行,没找到就在当前工作目录找,如果还没找到,就报错。我们添加环境变量的目的就是能够在任意一个黑框直接调用MySQL中的相关程序而不用总是修改工作目录,大大简化了操作。
添加步骤
右键**此电脑
→属性
**,点击高级系统设置
点击环境变量
在**系统变量
**中新建MYSQL_HOME
输入MySQL的安装地址
在系统变量
中找到并双击Path
点击新建
输入**%MYSQL_HOME%\bin**
最后点击确定。
如何验证是否添加成功?
右键开始菜单(就是屏幕左下角),选择**命令提示符(管理员)
,打开黑框,敲入mysql
**,回车。
如果提示Can't connect to MySQL server on '``localhost``'
则证明添加成功;
如果提示mysql不是内部或外部命令,也不是可运行的程序或批处理文件
则表示添加添加失败,请重新检查步骤并重试。
初始化
以管理员身份运行命令窗口
在命令行中输入
1 | mysqld --initialize-insecure |
稍微等待一会,如果出现没有出现报错信息,则证明data目录初始化没有问题,此时再查看MySQL目录下已经有data目录生成。
如果出现如下问题
是由于权限不足导致的,以管理员方式运行 cmd
命令行(注意必须以管理员身份启动)中,输入如下的指令,回车执行:
1 | mysqld -install |
现在你的计算机上已经安装好了MySQL服务了。
在黑框里敲入net start mysql
,回车。
1 | net start mysql // 启动mysql服务 |
在黑框里敲入mysqladmin -u root password 1234
,这里的1234
就是指默认管理员(即root账户)的密码,可以自行修改成你喜欢的。
1 | mysqladmin -u root password 1234 |
右键开始菜单,选择命令提示符
,打开黑框。
在黑框中输入,mysql -uroot -p1234
,回车,出现下图且左下角为mysql>
,则登录成功。
1 | mysql -uroot -p1234 |
到这里你就可以开始你的MySQL之旅了!
退出mysql:
1 | exit |
登录参数:
1 | mysql -u用户名 -p密码 -h要连接的mysql服务器的ip地址(默认127.0.0.1) -P端口号(默认3306) |
如果你想卸载MySQL,也很简单。
点击开始菜单,输入cmd,选择 “命令提示符”,选择右侧的 “以管理员身份运行”。
- 敲入
net stop mysql
,回车。
- 再敲入
mysqld -remove mysql
,回车。
- 最后删除MySQL目录及相关的环境变量。
至此,MySQL卸载完成!
MySQL连接
语法:mysql –u用户名 –p密码 [-h数据库服务器IP地址 -P端口号]
MySQL数据模型
关系型数据库: 建立在关系模型基础上,由多张相互连接的二维表组成的数据库。
特点:
使用表存储数据,格式统一,便于维护。
使用SQL语言操作,标准统一,使用方便,可用于复杂查询。
小结
1.什么是关系型数据库?
由多张二维表组成的数据库(RDBMS)
2.数据是如何在数据库中存储的?
数据库 -> 表 -> 数据(记录)
SQL语句
SQL:一门操作关系型数据库的编程语言,定义操作所有关系型数据库的统一标准。
分类:
DDL
数据库
操作语法
1 | -- 查询所有的数据库 |
小结:
1.同一个数据库服务器中,数据库的名字是否可以相同?
•不可以
2.MySQL8版本默认的字符集是什么?
•utf8mb4
•default charset utf8mb4
MySQL客户端工具
下载网址:https://www.jetbrains.com/zh-cn/datagrip/
注意修改一下安装位置一键下载就可以!!!
表结构-创建
创建表的语法
1 | -- 创建表 |
示例如下图所示:
约束:约束是作用于表中字段上的规则,用于限制存储在表中的数据。
目的:保证数据库中数据的正确性、有效性和完整性。
为表添加约束
语法示例:
1 | -- 创建表(约束) |
小结:
MySQL数据库中分为哪几类约束,对应的关键字是什么?
- primary key
- not null
- unique
- default
- foreign key
如何实现主键自增的效果呢?
- 定义主键的时候指定关键字 auto_increment
一个字段上是否可以添加多个约束 ?
- 可以,多个约束之间使用空格分开
表结构-数据类型
数据类型
MySQL中的数据类型有很多,主要分为三类:数值类型、字符串类型、日期时间类型。
数值类型:
字符串类型:
日期类型:
小结:
数值类型在定义的时候,后面加了unsigned关键字是什么意思?
- unsigned表示无符号类型,表示只能取0及正数
- 不加默认是signed,表示可以取负数
char与varchar的区别是什么?什么时候用char,什么时候用varchar?
- char是定长字符串,varchar是变长字符串
- 如果一个字段的长度是固定的,建议使用char;如:身份证号、手机号
- 如果一个字段的长度不是固定的,建议使用varchar;如:用户名、姓名
案例
要求:
1.阅读并分析页面原型及需求
2.分析表中包含哪些字段,以及字段的类型、约束
3.创建表结构(添加基础字段id、create_time、update_time)
示例代码
1 | -- 案例:设计员工表emp |
表结构-查询、修改、删除
表结构的查询、修改、删除相关语法如下:
1 | -- 查看当前数据库有哪些表 |
DML
DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增、删、改操作。
添加数据(INSERT)
修改数据(UPDATE)
删除数据(DELETE)
DML-insert
1 | -- DML : 插入数据 - insert |
注意:
1.插入数据时,指定的字段顺序需要与值的顺序是一 一对应的 。
2.字符串和日期型数据应该包含在引号中(单引号、双引号都可以)。
3.插入的数据大小/长度,应该在字段的规定范围内 。
DML-update
1 | -- DML : 更新数据 - update |
注意:
修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据。
DML-delete
1 | -- DML : 删除数据 - delete |
注意:
1.DELETE 语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据。
2.DELETE 语句不能删除某一个字段的值(如果要操作,可以使用UPDATE,将该字段的值置为NULL)。
DQL
DQL英文全称是Data Query Language(数据查询语言),用来查询数据库表中的记录。
关键字:SELECT
- 基本查询(select…from…)
- 条件查询(where)
- 分组查询(group by)
- 排序查询(order by)
- 分页查询(limit)
DQL-基本查询
基础语法:
1 | -- 查询多个字段 |
注意:
* 号代表查询所有字段,在实际开发中尽量少用(不直观、影响效率)
小结
1.基本查询语法?
select 字段列表 from 表名
2.如何为查询返回的字段设置别名?
字段名 [as] 别名
3.如何去除查询返回的重复记录?
distinct
**DQL-**条件查询
1 | -- 条件查询 |
小结:
1.如何进行null值的判断?
is null , is not null
2.模糊匹配中的通配符?
% (任意个字符), _(一个字符)
3.如何组装多个查询条件?
and / or
**DQL-**分组查询
聚合函数:将一列数据作为一个整体,进行纵向计算。
语法:
1 | -- 分组查询 |
注意:
1.null值不参与所有聚合函数的运算 。
2.统计数量可以使用:count() count(字段) count(常量),推荐使用count() 。
where与having的区别:
1.执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。
2.判断条件不同:where不能对聚合函数进行判断,而having可以。
注意:
1.分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。
2.执行顺序: where > 聚合函数 > having 。
小结:
1.DQL语句中where与having的区别?
•执行时机不同(where -> group by -> having)
•判断条件不同(having后可以用聚合函数,where不可以)
**DQL-**排序查询
1 | -- 排序查询 |
排序方式:升序(asc),降序(desc);默认为升序asc,是可以不写的。
注意:如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序。
小结:
1.下面排序查询的语法分别代表什么意思?
… order by age;
… order by age desc, score asc;
… order by age, score, update_time desc;
**DQL-**分页查询
1 | -- 排序查询 |
说明:
1.起始索引从0开始 。
2.分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT 。
3.如果起始索引为0,起始索引可以省略,直接简写为 limit 10 。
小结:
1.DQL语句中的分页查询
•语法:limit 起始索引,每页展示记录数
•注意:项目开发中,前端传递过来的是页码,需要转换为起始索引
•公式:(页码-1)* 每页展示记录数
DQL综合案例
1 | -- 准备测试数据 |
1 | -- =================== DQL: 基本查询 ====================== |
1 | -- =================== DQL: 条件查询 ====================== |
1 | -- =================== DQL: 分组查询 ====================== |
1 | -- 分组 |
1 | -- =================== 排序查询 ====================== |
1 | -- =================== 分页查询 ====================== |