【黑马JavaWeb+AI知识梳理】后端Web基础03 - MySQL概述
MySQL概述
数据库:DataBase(DB),存储和管理数据的仓库
数据库管理系统:DataBase Management System(DBMS),操纵和管理数据库的大型软件
SQL:Structured Query Language,操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准。
安装
连接
- 语法:mysql -u用户名 -p密码 [-h数据库服务器IP地址 -p端口号]
数据模型
-
关系型数据库(RDBMS):建立在关系模型基础上,由多张相互连接的二维表组成的数据库。
-
特点:
-
使用表存储数据,格式统一,便于维护
-
使用SQL语言操作,标准统一,使用方便,可用于复杂查询
-
-
数据库 -> 表 -> 数据(记录)
SQL语句
操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准
分类 | 全程 | 说明 |
---|---|---|
DDL | Data Definition Language | 数据定义语言,用来定义数据库对象(数据库,表,字段) |
DML | Data Manipulation Language | 数据操作语言,用来对对数据库表中的数据进行增删改 |
DQL | Data Query Language | 数据查询语言,用来查询数据库中表的记录 |
DCL(DBA,数据库管理员控制) | Data Control Language | 数据控制语言,用来创建数据库用户、控制数据库的访问权限 |
DDL
数据库
-
操作语法
下文中的database,也可以替换成schema,如:create schema db01; MySQL8版本中,默认字符集为utf8mb4
-
查询所有数据库
show databases;
-
查询当前数据库
select database();
-
使用/切换数据库
use 数据库名;
-
创建数据库
create database [if not exists] 数据库名 [default charset utf8mb4];
-
删除数据库
drop database [if exists] 数据库名;
-
-
MySQL
表结构-创建
-
操作语法:
create table user(id int [] comment '',username varchar(10) [] comment '' ) comment '';
- 约束:约束是作用于表中字段上的规则,用于限制存储在表中的数据。
- not null
- unique
- primary key
- default
- foreign key
- 目的:保证数据库中数据的正确性、有效性和完整性。
- 实现主键自增:定义主键时指定关键字 auto_increment
- 一个字段可以添加多个约束,但约束间要用空格分开
- 约束:约束是作用于表中字段上的规则,用于限制存储在表中的数据。
-
数据类型:在满足业务需求的前提下,尽可能选择占用磁盘空间小的数据类型
-
数值类型(unsigned:无符号,只能取0及正数)
-
整数
-
浮点数
float(5,2):(整个数字长度,小数位个数)
-
小数
-
-
字符串类型:char定长(性能高);varchar变长(节约磁盘空间)
-
日期时间类型:date、datetime
-
基础字段:id、create_time、update_time
-
表结构-查询、修改、删除
- 查询:show tables、desc emp、show create table emp;
- 修改:
- alter table emp add qq varchar(13) comment ‘’;
- alter table emp modify qq …
- alter table emp change qq qq_num varchar(15) comment ‘QQ号码’;
- alter table emp drop column 字段名;
- alter table emp rename to employee
- 删除:drop table employee
DML
Data Manipulation Language(数据操作语言),用来对数据库中的数据记录进行增、删、改操作。
- 添加数据(insert):insert into 表名 values 值
- 插入数据时,指定字段顺序需要与值的顺序是一一对应的。
- 字符串和日期型数据应该包含在引号中(单双均可,推荐单引号)。
- 插入的数据大小/长度,应该在字段的规定范围内。
- 修改数据(update):update 表名 set 字段名 = 值, 字段名 = 值, …[where 条件];
- 删除数据(delete):delete from 表名 [where 条件];
注意:
DQL
Data Query Language(数据查询语言),用来查询数据库表中的记录。
关键字:SELECT
select:字段列表
from:表名列表
where:条件列表
group by:分组字段列表
having:分组后条件列表
order by:排序字段列表
limit:分页参数
基本查询:查多个、查所有(*,开发中少用,不直观且影响效率)、设置别名(as)、去除重复(distinct)
条件查询:where 条件列表(与其他语法有区别的是:between … and … / in(…) / like 占位符(_:单个字符; % 任意个) / is (not) null)
and / or 组装多个查询条件
分组查询:
分组之后,select后的字段列表不能随意书写,能写的一般是分组字段 + 聚合函数:select gender, count(*) from …
执行顺序:where > 聚合函数 > having
-
聚合函数(不统计null值):将一列数据作为一个整体,进行纵向计算:count / max / min / avg / sum
count(*)(最推荐) count(字段) count(常量)(效率和*差不多)
-
select 字段列表 from 表名 [where 条件列表] group by 分组字段名 [having 分组后过滤条件];
where与having的区别:
- 执行时机:where在分组之前,不满足则不参与分组;having是对分组后的结果进行过滤
- 判断条件:having可以对聚合函数进行判断
排序查询:select 字段列表 from 表名 [where 条件列表] [group by 分组字段名 having 分组后过滤条件] order by 排序字段 排序方式;
- 方式:升序(asc),降序(desc);默认为升序asc,可以不写
- 如果是多字段排序,当第一个字段相同时,会根据第二个字段进行排序
分页查询:
select 字段列表 from 表名 [where 条件列表] [group by 分组字段名 having 分组后过滤条件] [order by 排序字段 排序方式] limit 起始索引, 查询记录数;
- 起始索引从0开始
- 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT
- 如果起始索引为0,起始索引可以省略,直接简写为limit 10
- 注意:项目开发中,前端传递过来的是页码,需要转换为起始索引
- 公式:(页码-1)* 每页展示记录数