Skip to content

MySQL 第二章:数据库基础概念

本章目标:建立数据库核心认知,搞清楚数据库、表、字段、约束、事务、范式这些高频概念,为后续 SQL 实战打基础。


1. 数据库体系总览

1.1 什么是数据库

  • 数据库(Database):按一定规则组织、可持久化存储的数据集合。
  • 数据库管理系统(DBMS):管理数据库的软件,例如 MySQL、PostgreSQL、SQL Server。
  • SQL:结构化查询语言,用于定义、查询、修改数据。

1.2 关系型数据库的核心思想

  • 数据按“表(Table)”组织。
  • 表由“行(Row) + 列(Column)”组成。
  • 表与表之间通过“主键(PK) + 外键(FK)”建立关系。
graph TD
    A["应用程序"] --> B["DBMS (MySQL)"]
    B --> C["数据库 school_db"]
    C --> D["表 students"]
    C --> E["表 classes"]
    D --> F["列: id, name, class_id"]
    E --> G["列: id, class_name"]
    D -. FK: class_id .-> E

2. 核心对象与术语

2.1 数据库、表、字段、记录

概念英文说明示例
数据库Database存放多张表的容器school_db
Table同类数据的结构化集合students
字段Column表中的某个属性name VARCHAR(50)
记录Row表中的一行数据1, 张三, 3班

2.2 键与约束

  • 主键(PRIMARY KEY):唯一标识一行数据,不能重复、不能为 NULL
  • 外键(FOREIGN KEY):引用其他表主键,保证关联数据合法。
  • 唯一约束(UNIQUE):字段值不能重复。
  • 非空约束(NOT NULL):字段必须有值。
  • 默认值(DEFAULT):未显式赋值时自动填充值。

3. 常见数据类型(MySQL)

3.1 数值类型

  • INT:整数,常用于 ID、计数。
  • BIGINT:更大范围整数,常用于大规模业务主键。
  • DECIMAL(M,D):精确小数,适合金额场景(不要用浮点存金额)。

3.2 字符类型

  • CHAR(n):定长字符串,长度固定时性能稳定。
  • VARCHAR(n):变长字符串,更节省空间,业务中最常用。
  • TEXT:长文本,例如文章内容、日志片段。

3.3 时间类型

  • DATE:日期(年-月-日)
  • DATETIME:日期时间(推荐业务常用)
  • TIMESTAMP:时间戳,常配合默认值记录创建/更新时间

4. 字符集与排序规则

  • 字符集(Character Set) 决定“能存什么字符”,推荐 utf8mb4(支持 Emoji)。
  • 排序规则(Collation) 决定“怎么比较和排序字符串”,常见如 utf8mb4_general_ci

建议:

  1. 数据库级别统一使用 utf8mb4
  2. 新建表和连接参数都保持一致,避免乱码。

5. 事务基础(ACID)

事务(Transaction)是一组要么全部成功、要么全部失败的 SQL 操作,常用于转账、下单等场景。

5.1 ACID 四大特性

  • A 原子性(Atomicity):事务内操作不可分割。
  • C 一致性(Consistency):事务前后数据满足约束规则。
  • I 隔离性(Isolation):并发事务互不干扰。
  • D 持久性(Durability):提交后数据永久生效。

5.2 事务执行流程

flowchart LR
    A[BEGIN] --> B[执行多条SQL]
    B --> C{是否出错?}
    C -- 否 --> D[COMMIT]
    C -- 是 --> E[ROLLBACK]
    D --> F[数据持久化]
    E --> G[恢复到事务前]

6. 关系设计与范式(入门)

6.1 为什么要做表设计

  • 避免数据冗余(同一信息重复存多份)
  • 避免更新异常(改一处漏改多处)
  • 提升查询与维护效率

6.2 常见设计建议

  • 一张表只描述一个核心实体(用户表、订单表分开)。
  • 主键尽量稳定(常用自增 ID 或雪花 ID)。
  • 业务关联优先通过外键字段表达,不靠字符串拼接。
  • 高频查询字段建立索引(后续章节会展开)。

7. DDL / DML / DQL / DCL 快速区分

分类全称作用常见命令
DDLData Definition Language定义结构CREATE ALTER DROP
DMLData Manipulation Language操作数据INSERT UPDATE DELETE
DQLData Query Language查询数据SELECT
DCLData Control Language权限控制GRANT REVOKE

8. 本章小结

  • MySQL 是关系型 DBMS,核心是“表结构 + 关系约束 + SQL 操作”。
  • 建表不只是字段堆砌,更重要的是主键、外键、约束和类型选择。
  • 事务是业务正确性的底线,尤其是资金类和状态流转类场景。
  • 先把概念打牢,后续写 SQL、做索引优化才不会“只会写,不会设计”。

9. 练习题(建议动手)

  1. 解释数据库、表、字段、记录四者的关系。
  2. 为什么金额字段推荐 DECIMAL 而不是 FLOAT
  3. 举例说明主键和外键分别解决了什么问题。
  4. 画出“用户-订单”两张表的关系结构(可用 Mermaid)。