MySQL
1 MySQL概述
一门结构化查询语言。一门操作关系型数据库的编程语言
1.1 原理
关系型数据库(RDBMS): 建立在关系模型基础上,由多张相互连接的二维表组成的数据库。
MySQL客户端连接数据库管理系统DBMS, 使用MySQL客户端, 向数据库管理系统发送一条SQL语句, 由数据库管理系统根据SQL语句指令去操作数据库中的表结构及数据
1.2 使用方法
1) 先去创建数据库(可以创建多个数据库,之间是相互独立的)
2) 在数据库下再去创建数据表(一个数据库下可以创建多张表)
3) 再将数据存放在数据表中(一张表可以存储多行数据)
1.3 MySQL语句分类
1.3.1 DDL - Data Definition Language
数据定义语言,用来定义数据库对象(数据库,表,字段)
1.3.2 DML - Data Manipulation Language
数据操作语言,用来对数据库表中的数据进行增删改
1.3.3 DQL - Data Query Language
数据查询语言,用来查询数据库中表的记录
1.3.4 DCL - Data Control Language
数据控制语言,用来创建数据库用户、控制数据库的访问权限
2 数据库设计-DDL
2.1 数据库三个阶段
1) 设计阶段: 参照页面原型以及需求文档设计数据库表结构
2) 操作阶段: 根据业务功能的实现,编写SQL语句对数据表中的数据进行增删改查操作
3) 优化阶段: 通过数据库的优化来提高数据库的访问性能。优化手段:索引、SQL优化、分库分表等
2.2 增 (创建新表)
create table 表名(
字段1 字段类型 [ 约束 ] [ comment 字段1注释 ] ,
......
字段n 字段类型 [ 约束 ] [ comment 字段n注释 ]
) [ comment 表注释 ] ;
2.3 约束
2.3.1 非空约束
not null - 限制该字段值不能为null
2.3.2 唯一约束
unique - 保证字段的所有数据都是唯一、不重复的
2.3.3 主键约束
primary key - 主键是一行数据的唯一标识,要求非空且唯一
2.3.4 默认约束
default 默认值 - 保存数据时,如果未指定该字段值,则采用默认值
2.3.5 外键约束
foreign key - 让两张表的数据建立连接,保证数据的一致性和完整性
2.4 数据类型
2.4.1 常用数值类型
1) 整数类型(Integer Types):包括TINYINT、SMALLINT、MEDIUMINT、INT和BIGINT,用于存储整数值。
2) 浮点数类型(Floating-Point Types):包括FLOAT和DOUBLE,用于存储浮点数(小数)值。
2.4.2 字符串类型
包括CHAR、VARCHAR、TEXT和LONGTEXT等,用于存储文本或字符串数据。
2.4.3 日期类型
包括DATE、TIME、DATETIME和TIMESTAMP,用于存储日期和时间信息。
2.4.4 int(10), char(10), varchat(10)的区别
int(10) : 指只显示10位数, 如果为空则输出0, 比如48==>0000000048
char(10): 只最大储存10个字符, 不足10个也占用10个字符空间, 效率高, 但是浪费内存
varchat(10) : 可变字符, 最大可存10个字符, 不足十个按照实际容量储存, 效率低, 但是节约内存
3 数据库操作-DML
3.1 添加数据(INSERT)
insert into 表名 (字段名1, 字段名2) values (值1, 值2);
3.2 删除数据(DELETE)
delete from 表名 [ where 条件 ];
3.3 修改数据(UPDATE)
update 表名 set 字段名1 = 值1 , 字段名2 = 值2 , .... [ where 条件 ] ;
4 数据库操作-DQL
4.1 查询完整语法
基本查询+条件(where)+分组(group)+排序(order by)+分页(limit)
4.2 基本查询
4.2.1 查询多个字段
select 字段1, 字段2, 字段3 from 表名;
4.2.2 查询所有字段
select * from 表名;
4.2.3 设置别名
select 字段1 [ as 别名1 ] , 字段2 [ as 别名2 ] from 表名;
4.2.4 去除重复记录
select distinct 字段列表 from 表名;
4.3 条件查询
select 字段列表 from 表名 where 条件列表 ;
5 数据库操作-DQL
5.1 分组查询
5.1.1 聚合函数
select 聚合函数(字段列表) from 表名 ;
聚合函数包括: count, max, min, avg, sum
5.1.2 分组查询
分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义
select 字段列表 from 表名 [ where 条件 ] group by 分组字段名 [ having 分组后过滤条件 ];
where与having区别
- where是分组之前进行过滤,而having是分组之后对结果进行过滤
- where不能对聚合函数进行判断,而having可以
5.2 排序查询
select 字段列表 from 表名 [ where 条件列表 ] [ group by 分组字段 ] order by 字段1 排序方式1;
ASC:升序(默认值)
DESC:降序
5.3 分页查询
select 字段列表 from 表名 limit 跳过的数量, 查询记录数;
5.4 函数查询 (用于更改表单内部文字)
5.4.1 if (两个)
if(条件 ,true展示的值 , false 展示的值 );
5.4.2 case (两个及以上)
case
字段
when 值 then 展示的值
when 值 then 展示的值
....
else 展示的值
end
6 多表设计
6.1 作用
主要是用来描述多个表之间的关系,通过外键进行关联, 外键是用于建立表与表之间的关联关系的一种机制。它定义了一个字段或一组字段,用于关联到另一个表的主键或唯一键上。这样可以确保数据的完整性和一致性,通过外键约束可以防止无效或不一致的关系.
这里所用的是物理外键
6.2 一对多
6.2.1 使用情景
一个数据,对应多条数据 一个部门 多个 员工。 一个班级 ,多个学生
6.2.2 实现步骤
在子表【多的一方】设置一个字段【设置外键】
6.3 一对一
6.3.1 使用情景
一个表的数据太多的时候,进行拆分
6.3.2 实现步骤
在任意表条件外键, 对外键中加上 unique 声明唯一约束
6.4 多对多
6.4.1 使用情景
双向的一对多
6.4.2 实现步骤
创建一个中间表,两个外键去关联两个表的主键
6.5 图表可视化
DataGrip: 选中有联系的表, 反点选择Diagrams => Show Visualization (或者快捷键Ctrl+Alt+Shift+U)
7 多表查询
7.1 内连接
用于展示某一张表的所有数据, 但是null的元素会被删除
这里的内可以被理解为两个集合中的交集
7.1.1 隐式内连接 (实际开发用不多)
select * from 表1 , 表2 where 外键 = 主键
7.1.2 显式内连接 (实际开发用的较多)
select * from 表1 inner join 表2 on 外键= 主键
7.2 外连接
用于展示某一张表的所有数据
这里的左右指摆放的位置, 摆放在左边为主表, 在主表的基础上扩展, 可以理解为并集
7.2.1 左外连接
select * from 主表 left join 表2 on 外键 = 主键
7.2.2 右外连接
select * from 表 right join 主表 on 外键 = 主键
7.3 子查询
用一个查询的结果去组织另外一个查询, 一般实现可以先写框架, 在一点一点慢慢实现功能, 可以借助图形化工具来理解
7.3.1 标量查询
返回单行单列的值 : where 值 = (子查询)
7.3.2 列查询
返回一列多行数据: where 值 in (子查询)
7.3.3 行查询
返回一行多列的数据: where (值, 值..) = (子查询)
7.3.4 表查询
返回多行多列的数据: from (子查询) 一般都是参考 内连接 、外连接
8 事务
8.1 事务概念
事务是多个操作组成一个集合,要么全部成功要么全部失败
8.2 事务操作
8.2.1 开启事务
begin/ strart transaction
8.2.2 提交事务
commit
8.2.3 回滚
rollback
9 索引
9.1 索引的概念
数据库的索引本质是数据结构(B+树)
9.2 索引的作用
/\ 提高查询效率
/\ 提高排序的效率
9.3 索引的操作
9.3.1 创建索引
create index 索引名 on 表名(字段名)
9.3.2 查看索引
show index from 表名
9.3.3 删除索引
drop index 索引名 on 表名