MySQL 学习笔记 Day01:基础概念与常用命令

本文基于我在 MySQL 入门阶段的系统学习整理,主要记录数据库与 SQL 的核心概念、常用语法分类以及一些容易忽视的细节,为后续索引、事务与性能优化打基础。

一、数据库的基本认识

1. 数据库与 DBMS

  • 数据库(DB):是有组织的存储数据的仓库
  • 数据库管理系统(DBMS):则是用来管理数据库的软件(MySQL、Oracle)
  • SQL:操作关系型数据库的统一语言(类比机器码:计算机识别的统一语言)

尽管关系型数据库产品众多(MySQL、Oracle、PostgreSQL 等),但SQL 语法是统一标准,这也是关系型数据库易于学习和迁移的重要原因。

2. 关系数据及其特点

  • 数据以二维表(行列)的形式组织,可以想象为 excel 的形式
  • 表与表之间可以通过外键建立关系
  • 结构清晰、规范统一、易于维护

二、SQL 语句

SQL 语句分为四类:DDL、DML、DQL、DCL

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

注意:

  • SQL 不区分大小写,每个语句以分号结尾

  • DML 中对数据进行删除用的是 delete,而 DDL 中的删除是 drop

三、表结构设计与数据类型选择

1. 常见数据类型

  • 数值类型intbigintdecimal
  • 字符串类型char(定长,性能更优)、varchar(变长,更灵活)
  • 日期时间类型datedatetime

2. 表结构设计原则

  • 主键明确,通常使用自增 id

  • 字段大小合理,避免浪费

  • 年龄等字段避免负数(无符号或约束)

  • 尽量为字段添加 comment,提高可读性

四、DML:数据增删改

插入数据

  • 字段顺序必须和插入值一一对应
  • 字符串和日期类型需要使用引号

修改/删除数据

  • UPDATE / DELETE 一定要注意 WHERE 条件,不加条件会影响整张表,这是开发中的高危操作

五、DQL:数据查询

1. 查询的基本语法

1
2
3
4
5
6
7
SELECT 字段
FROM
WHERE 条件
GROUP BY 分组字段
HAVING 分组后条件
ORDER BY 排序
LIMIT 分页

执行顺序:选表、where 过滤、分组、分组过滤、选择字段、排序、分页

2. where 和 having 的区别

  • WHERE:在分组 之前 过滤数据
  • HAVING:在分组 之后 过滤数据
  • WHERE 不能直接使用聚合函数,HAVING 可以

3. 分页查询

1
LIMIT 起始索引, 查询条数
  • 起始索引从 0 开始

  • 计算公式:
    (页码 − 1) × 每页条数

  • 超出范围不会报错,只会返回空结果集

六、约束与外键:保证数据正确性

常见约束

  • NOT NULL:非空
  • UNIQUE:唯一
  • PRIMARY KEY:主键
  • FOREIGN KEY:外键

外键的意义

  • 保证表与表之间的数据一致性
  • 防止“脏数据”出现(如员工引用不存在的部门)

实际项目中,是否使用物理外键需要权衡性能与一致性,很多互联网项目选择逻辑外键。

七、多表关系与查询方式

表关系

  • 一对多(部门-员工)
  • 多对多(学生-课程,需要中间表)
  • 一对一(表拆分优化)

多表查询方式

  • 内连接 / 左外连接 / 右外连接
  • 自连接
  • 子查询(标量 / 列 / 行 / 表子查询)

八、事务基础(为后续深入做铺垫)

事务的特性(ACID)

  • 原子性
  • 一致性
  • 隔离性
  • 持久性

并发事务问题

  • 脏读
  • 不可重复读
  • 幻读

MySQL 默认隔离级别是 Repeatable Read,在安全性和性能之间取得平衡。

九、今日小结

  • 建表过程中,最后一个字段后没有 , 其余字段均有 ,
  • 每条语句以 ; 结尾
  • 对于数据行的删除用关键字 delete,对于表、数据库、视图的删除用关键字 drop
  • 约束条件在数据类型后
  • DQL 的执行顺序:选表、where 过滤、分组、分组后过滤、选择字段、排序、分页
  • 联合查询是合并两个结果集,子查询是在结果集的基础上在进行查询,子查询的结果集可以作为条件也可以作为表,也可以作为选择字段
  • 涉及子查询的复杂查询,可以分步查询,实现目标。
  • 并发事务的三大问题:脏读、不可重复读、幻读