Cynicism Cynicism
首页
  • 前端学习笔记

    • 《Vue》笔记
    • 《TypeScript 从零实现 axios》
    • TypeScript
    • JS设计模式总结
    • 小程序笔记
  • 后端学习笔记

    • 《JavaWeb》
    • 《SSM》
    • 《瑞吉外卖》
    • 《Git》
    • 《SpringCloud》
    • 《黑马点评》
    • 《Spring原理》
    • 《JVM》
    • 《Java并发编程》
    • 《学成在线》
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 面试
  • 常见问题
  • 实用技巧
  • 友情链接
实习
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Cynicism

Java后端学习中的IKUN
首页
  • 前端学习笔记

    • 《Vue》笔记
    • 《TypeScript 从零实现 axios》
    • TypeScript
    • JS设计模式总结
    • 小程序笔记
  • 后端学习笔记

    • 《JavaWeb》
    • 《SSM》
    • 《瑞吉外卖》
    • 《Git》
    • 《SpringCloud》
    • 《黑马点评》
    • 《Spring原理》
    • 《JVM》
    • 《Java并发编程》
    • 《学成在线》
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 面试
  • 常见问题
  • 实用技巧
  • 友情链接
实习
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • JS对象基础知识
  • Ajax与Maven
  • 请求响应
  • 分层解耦
  • MySql基础
    • 1. 数据模型
    • 2. SQL简介
      • 2.1 通用语法
      • 2.2 分类
    • 3. 数据库设计 - DDL
      • 3.1 数据库操作
      • 3.2 表操作
    • 4. 数据库操作 - DML
      • 4.1 增加(INSERT)
      • 4.2 修改(UPDATE)
      • 4.3 删除(DELETE)
    • 5. 数据库操作 - DQL
      • 5.1 单表操作
      • 5.1.1 基本查询
      • 5.1.2 条件查询
      • 5.1.3 分组查询
      • 5.1.4 排序查询
      • 5.1.5 分页查询
      • 5.2 多表操作
      • 5.2.1 一对多
      • 5.2.2 一对一
      • 5.2.3 多对多
  • MySql进阶
  • Mybatis入门
  • Mybatis进阶
  • Springboot项目
  • 登录校验
  • AOP
  • Springboot原理
  • 私服配置说明
  • 《JavaWeb》笔记
cynicism
2023-4-6
目录

MySql基础

# 1. 数据模型

关系型数据库(RDBMS)

概念:建立在关系模型基础上,由多张相互连接的二维表组成的数据库

关系模型

# 2. SQL简介

# 2.1 通用语法

  • SQL语句可以单行或多行书写,以分号结尾;
  • SQL语句可以使用空格/缩进来增强语句的可读性;
  • MySQL数据库的SQL语句不区分大小写;
  • 注释:
    • 单行注释:-- 注释内容 或 # 注释内容(MySQL特有)
    • 多行注释: /* 注释内容 */

# 2.2 分类

💡SQL语句根据其功能被分为四大类:DDL、DML、DQL、DCL

分类 全称 说明
DDL Data Definition Language 数据定义语言,用来定义数据库对象(数据库,表,字段)
DML Data Manipulation Language 数据操作语言,用来对数据库表中的数据进行增删改
DQL Data Query Language 数据查询语言,用来查询数据库中表的记录
DCL Data Control Language 数据控制语言,用来创建数据库用户、控制数据库的访问权限

# 3. 数据库设计 - DDL

# 3.1 数据库操作

💡DDL中数据库的常见操作:查询、创建、使用、删除
① 查询:

  • 所有数据库:show databases;
  • 当前数据库:select database();

② 创建:create database [ if not exists ] 数据库名;
③ 使用:use 数据库名;
④ 删除:drop database [ if exists ] 数据库名;

说明:上述语法中的database,也可以替换成 schema

# 3.2 表操作

💡表结构的操作:创建、查询、修改、删除
① 创建:

create table  表名(
	字段1  字段1类型 [约束]  [comment  字段1注释 ],
	字段2  字段2类型 [约束]  [comment  字段2注释 ],
	......
	字段n  字段n类型 [约束]  [comment  字段n注释 ] 
) [ comment  表注释 ] ;
1
2
3
4
5
6

[ ] 中的内容为可选参数; 最后一个字段后面没有逗号; 在MySQL数据库当中,提供了以下5种约束:

约束 描述 关键字
非空约束 限制该字段值不能为null not null
唯一约束 保证字段的所有数据都是唯一、不重复的 unique
主键约束 主键是一行数据的唯一标识,要求非空且唯一 primary key
默认约束 保存数据时,如果未指定该字段值,则采用默认值 default
外键约束 让两张表的数据建立连接,保证数据的一致性和完整性 foreign key

注意:约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束。 主键自增:auto_increment(从1开始)

② 查询:

  • 查询所有表:show tables;
  • 查看表结构:desc 表名 ;
  • 查询建表语句:show create table 表名 ;

③ 修改:

  • 添加字段:alter table 表名 add 字段名 类型(长度) [comment 注释] [约束];
  • 修改数据类型:alter table 表名 modify 字段名 新数据类型(长度);
  • 删除字段:alter table 表名 drop 字段名;
  • 修改表名:rename table 表名 to 新表名;

④ 删除:

  • 删除表:drop table [ if exists ] 表名;

# 4. 数据库操作 - DML

# 4.1 增加(INSERT)

  • 向指定字段添加数据
    insert into 表名 (字段名1, 字段名2) values (值1, 值2);
    
    1
  • 全部字段添加数据
    insert into 表名 values (值1, 值2, ...);
    
    1
  • 批量添加数据(指定字段)
    insert into 表名 (字段名1, 字段名2) values (值1, 值2), (值1, 值2);
    
    1
  • 批量添加数据(全部字段)
    insert into 表名 values (值1, 值2, ...), (值1, 值2, ...);
    
    1

# 4.2 修改(UPDATE)

update 表名 set 字段名1 = 值1 , 字段名2 = 值2 , .... [where 条件] ;
1

# 4.3 删除(DELETE)

delete from 表名  [where  条件] ;
1

# 5. 数据库操作 - DQL

# 5.1 单表操作

# 5.1.1 基本查询

  • 查询多个字段

    select 字段1, 字段2, 字段3 from  表名;
    
    1
  • 查询所有字段(通配符)

    select *  from  表名;
    
    1
  • 设置别名

    select 字段1 [ as 别名1 ] , 字段2 [ as 别名2 ]  from  表名;
    
    1
  • 去除重复记录

    select distinct 字段列表 from  表名;
    
    1

# 5.1.2 条件查询

select  字段列表  from   表名   where   条件列表 ; 
1
比较运算符 功能
> 大于
>= 大于等于
< 小于
<= 小于等于
= 等于
<> 或 != 不等于
between ... and ... 在某个范围之内(含最小、最大值)
in(...) 在in之后的列表中的值,多选一
like 占位符 模糊匹配(_匹配单个字符, %匹配任意个字符)
is null 是null
逻辑运算符 功能
and 或 && 并且 (多个条件同时成立)
or 或 || 或者 (多个条件任意一个成立)
not 或 ! 非 , 不是
聚合函数 功能
count 统计数量
max 最大值
min 最小值
avg 平均值
sum 求和

# 5.1.3 分组查询

分组其实就是按列进行分类(指定列下相同的数据归为一类),然后可以对分类完的数据进行合并计算。

分组查询通常会使用聚合函数进行计算。

select  字段列表  from  表名  [where 条件]  group by 分组字段名  [having 分组后过滤条件];
1

💡 执行顺序:where > 聚合函数 > having

where与having区别(面试题)

  • 执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。
  • 判断条件不同:where不能对聚合函数进行判断,而having可以。

# 5.1.4 排序查询

select  字段列表  
from   表名   
[where  条件列表] 
[group by  分组字段 ] 
order  by  字段1  排序方式1 , 字段2  排序方式2 … ;
1
2
3
4
5
  • 排序方式:

    • ASC :升序(默认值)
    • DESC:降序

# 5.1.5 分页查询

select  字段列表  from   表名  limit  起始索引, 查询记录数 ;
1
  1. 起始索引从0开始。 计算公式 : 起始索引 = (查询页码 - 1)* 每页显示记录数
  2. 如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 条数

# 5.2 多表操作

# 5.2.1 一对多

一对多关系实现:在数据库表中多的一方,添加字段,来关联属于一这方的主键。 外键约束:让两张表的数据建立连接,保证数据的一致性和完整性。foreign key 外键约束的语法:

-- 创建表时指定
create table 表名(
	字段名    数据类型,
	...
	[constraint]   [外键名称]  foreign  key (外键字段名)   references   主表 (主表列名)	
);
-- 建完表后,添加外键
alter table  表名  add constraint  外键名称  foreign key(外键字段名) references 主表(主表列名);
1
2
3
4
5
6
7
8

物理外键和逻辑外键

  • 物理外键

    • 概念:使用foreign key定义外键关联另外一张表。
    • 缺点:
      • 影响增、删、改的效率(需要检查外键关系)。
      • 仅用于单节点数据库,不适用与分布式、集群场景。
      • 容易引发数据库的死锁问题,消耗性能。
  • 逻辑外键

    • 概念:在业务层逻辑中,解决外键关联。
    • 通过逻辑外键,就可以很方便的解决上述问题。

# 5.2.2 一对一

一对一 :在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(UNIQUE)

# 5.2.3 多对多

多对多的关系在开发中属于也比较常见的。比如:学生和老师的关系,一个学生可以有多个授课老师,一个授课老师也可以有多个学生。在比如:学生和课程的关系,一个学生可以选修多门课程,一个课程也可以供多个学生选修。

编辑 (opens new window)
#后端#mysql
上次更新: 2025/05/12, 04:51:03
分层解耦
MySql进阶

← 分层解耦 MySql进阶→

最近更新
01
JVM调优
06-03
02
Linux篇
03-30
03
Kafka篇
03-30
更多文章>
Theme by Vdoing | Copyright © 2023-2025 Cynicism | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式