MySQL

114 阅读7分钟

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)

image-20230907120017010转存失败,建议直接上传图片文件

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 表名