MySQL系列 (1):数据库原理

文章目录

  • [MySQL 系列](#MySQL 系列)
    • [1 数据库原理](#1 数据库原理)
      • [1.1 数据的分类](#1.1 数据的分类)
      • [1.2 数据管理发展历史](#1.2 数据管理发展历史)
        • [1.2.1 三个发展阶段](#1.2.1 三个发展阶段)
        • [1.2.2 文件管理系统优缺点](#1.2.2 文件管理系统优缺点)
      • [1.3 数据库管理系统](#1.3 数据库管理系统)
        • [1.3.1 核心概念](#1.3.1 核心概念)
        • [1.3.2 DBMS 特点](#1.3.2 DBMS 特点)
        • [1.3.3 DBMS 七大基本功能](#1.3.3 DBMS 七大基本功能)
        • [1.3.4 DBMS 发展历史](#1.3.4 DBMS 发展历史)
        • [1.3.5 数据库软件排名](#1.3.5 数据库软件排名)
      • [1.4 关系型数据库理论](#1.4 关系型数据库理论)
        • [1.4.1 E‑R 模型(实体‑联系模型 ERD)](#1.4.1 E‑R 模型(实体‑联系模型 ERD))
        • [1.4.2 实体间三种联系类型](#1.4.2 实体间三种联系类型)
        • [1.4.3 CRUD 数据操作](#1.4.3 CRUD 数据操作)
        • [1.4.4 数据库范式(正规化)](#1.4.4 数据库范式(正规化))
          • [1NF 第一范式:原子性](#1NF 第一范式:原子性)
          • [2NF 第二范式:消除部分依赖](#2NF 第二范式:消除部分依赖)
          • [3NF 第三范式:消除传递依赖](#3NF 第三范式:消除传递依赖)
        • [1.4.5 SQL 结构化查询语言](#1.4.5 SQL 结构化查询语言)
          • [SQL 语言五大分类](#SQL 语言五大分类)
          • [SQL 编写规范](#SQL 编写规范)
          • [SQL 注释写法](#SQL 注释写法)
          • 数据库对象命名规则
    • *学习复盘

MySQL 系列

实验环境 ip:192.168.108.128

1 数据库原理

1.1 数据的分类

数据按照结构类型分为三类:结构化数据、半结构化数据、非结构化数据。

结构化数据

可以用二维表来逻辑表达实现的数据,拥有固定格式、有限长度,可使用关系型数据库存储。

  • 特点:
    1. 以行为单位,一行代表一个实体;每行属性完全相同;
    2. 存储在数据库中;
    3. 使用统一结构描述;
    4. 先定义结构,再录入数据。

示例二维表:

no name age
1 唐三 123
2 叶凡 456
半结构化数据

介于结构化与非结构化中间,属于自描述结构,结构和数据混合在一起,先有数据再有结构。

常见格式:JSON、XML、HTML,NoSQL 数据库。

JSON 范例:

复制代码
[
    {
        "id":1,
        "name":"唐三",
        "age":123
    },
    {
        "id":2,
        "name":"叶凡",
        "age":456
    }
]
非结构化数据

没有固定格式、长度不固定,无法用二维表描述,整体存储。

典型:二进制文件、音视频、图片。


1.2 数据管理发展历史

数据管理经历三个阶段:人工管理 → 文件系统 → 数据库系统

1.2.1 三个发展阶段
  1. 人工管理阶段(20 世纪 50 年代中期以前)
    • 硬件:磁带、打孔纸带;无专门数据管理软件;
    • 用途:科学计算;
    • 处理方式:批处理。
  2. 文件系统管理阶段(50 年代后期~60 年代中期)
    • 硬件:磁盘、磁鼓,可以随机存取;
    • 软件:文件系统管理数据;
    • 特点:数据可以长期保存,支持批处理、联机实时处理。
  3. 数据库系统阶段(60 年代后期至今)
    • 硬件:大容量磁盘,硬件成本下降;
    • 通过 DBMS 数据库管理系统管理数据;
    • 特征:高数据独立性、低数据冗余度。
1.2.2 文件管理系统优缺点

优点

  • 文件格式多样化,数据长期保存,具备一定独立性。

缺点

  • 无统一访问接口;不支持并发访问;缺少安全控制;
  • 很难按照业务视图组织数据;数据之间关联弱,冗余不可避免。

1.3 数据库管理系统

1.3.1 核心概念

数据库:Database

数据库是按照一定的数据结构来组织,存储和管理数据的仓库。 是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。

数据库管理系统:Database Management System(DBMS)

数据库管理系统是一种操纵和管理数据库的大型软件,用于建立,使用和维护数据库,简称DBMS。 它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。

数据库管理员:Database Administrator(DBA)

DBA是从事管理和维护数据库管理系统(DBMS)的相关工作人员的统称,属于运维工程师的一个分支, 主要负责业务数据库从设计、测试到部署交付的全生命周期管理。 DBA的核心目标是保证数据库管理系统的稳定性、安全性、完整性和高可用性能。

应用程序:Application

一个应用程序通常是指能够执行某种功能的软件程序。

1.3.2 DBMS 特点
  1. 使用复杂数据模型,数据冗余小,易扩展,实现数据共享
  2. 具有较高的数据和程序独立性。数据库的独立性表现在物理独立性和逻辑独立性两个方面。
  3. 数据库管理系统为用户和应用程序提供了方便和统一的查询接口
  4. 数据库管理系统的存在,使得数据可以和应用程序解耦
  5. 内置能力:并发控制、备份恢复、完整性、安全性保障
1.3.3 DBMS 七大基本功能
  1. 数据的定义:DBMS提供了数据定义语言DDL(Data Definition Language),供用户定义数据库的三级模式结构,两级映像以及完整性约束和保密限制等约束。DDL主要用于建立、修改数据库的库结构。DDL所描述的库结构仅仅给出了数据库的框架,数据库的框架信息被存放在数据字典中。
  2. 数据操作:DBMS提供数据操作语言DML(Data Manipulation Language),供用户实现对数据的追加、删除、更新、查询等操作。
  3. 数据组织、存储与管理:DBMS要分类组织、存储和管理各种数据,包括数据字典、用户数据、存取路径等,需确定以何种文件结构和存取方式在存储级上组织这些数据,如何实现数据之间的联系。数据组织和存储的基本目标是提高存储空间利用率,选择合适的存取方法提高存取效率。
  4. 数据库的运行管理:数据库的运行管理功能是DBMS的运行控制、管理功能,包括多用户环境下的并发控制、安全性检查和存取限制控制、完整性检查和执行、运行日志的组织管理、事务的管理和自动恢复,即保证事务的原子性。这些功能保证了数据库系统的正常运行。
  5. 数据库的维护:这一部分包括数据库的数据载入、转换、转储、数据库的重组和重构以及性能监控等功能,这些功能分别由各个使用程序来完成。
  6. 数据库的保护:数据库中的数据是信息社会的战略资源,所以数据的保护至关重要。DBMS对数据库的保护通过4个方面来实现:数据库的恢复、数据库的并发控制、数据库的完整性控制、数据库安全性控制。DBMS的其他保护功能还有系统缓冲区的管理以及数据存储的某些自适应调节机制等。
  7. 通信:DBMS具有与操作系统的联机处理、分时系统及远程作业输入的相关接口,负责处理数据的传送。对网络环境下的数据库系统,还应该包括DBMS与网络中其他软件系统的通信功能以及数据库之间的互操作功能。
1.3.4 DBMS 发展历史

自20世纪60年代中后期开始,使用电脑进行数据处理的规模越来越大,同时也出现了大容量的磁盘存储设备,操作系统也日渐成熟,为了解决数据的独立性问题,实现数据的统一管理,达到数据共享的目的,出现了数据库技术。

数据库技术从出现至今,经历了多次的迭代行进,在这个过程中,按时间和特性,可以将数据库管理系统分为三类。数据库三代模型:层次数据库 → 网状数据库 → 关系型数据库 RDBMS

  1. 层次数据库

    层次模型数据库系统是最早研制成功的数据库系统,这种数据库中的数据被组织成一个树状模型,这种结构简单,但缺乏灵活性,各数据之间仅限于一对多的关系。

    • 树状模型,只能一对多;代表:IBM IMS。
  2. 网状数据库

    网状数据库是采用网状原理和方法,以网状数据模型为基础建立的数据库。

    网状数据模型是以记录类型为结点的网络结构,即一个结点可以有一个或多个下级结点,也可以有一个或多个上级结点,两个结点之间甚至可以有多种联系,两个记录类型之间的值可以是多对多的联系。

    • 网络模型;结点可以拥有多个上下级,支持多对多关系。
  3. 关系型数据库 RDBMS

    关系数据库管理系统:Relational Database Management System(RDBMS)

    是指包括相互联系的逻辑组织和存取这些数据的一套程序(数据库管理系统软件)。关系数据库管理系统就是管理关系数据库,并将数据逻辑组织的系统。

    常见的关系型数据库管理系统有Oracle,MySQL,DB2,SQLServer等。

    关系型数据库,是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。用户通过查询来检索数据库中的数据,而查询是一个用于限定数据库中某些区域的执行代码。关系模型可以简单理解为二维表格模型,而一个关系型数据库就是由二维表及其之间的关系组成的一个数据组织。

关系型数据库中的相关概念

在我们开始学习MySQL 数据库前,让我们先了解下RDBMS的一些术语:

  • 数据库: 数据库是一些关联表的集合。
  • 数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
  • 列(column): 一列(数据元素) 包含了相同类型的数据, 例如邮政编码的数据。
  • 行(Row): 一行(元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
  • 冗余: 存储两倍数据,冗余降低了性能,但提高了数据的安全性。
  • 主键(Primary key): 主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
  • 外键: 外键用于关联两个表。
  • 复合键: 复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
  • 索引: 使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
  • 参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。

MySQL 为关系型数据库(Relational Database Management System), 这种所谓的"关系型"可以理解为"表格"的概念, 一个关系型数据库由一个或数个表格组成, 如图所示的一个表格:

  • 表头(header): 每一列的名称;

  • 列(col): 具有相同数据类型的数据的集合;

  • 行(row): 每一行用来描述某条记录的具体信息;

  • 值(value): 行的具体信息, 每个值必须与该列的数据类型相同;

  • 键(key): 键的值在当前列中具有唯一性。

常见的关系型数据库系统

  • MySQL 分支:MySQL、MariaDB、Percona Server
  • PostgreSQL(PgSQL)
  • Oracle
  • Microsoft SQL Server
  • DB2
1.3.5 数据库软件排名

参考网站:https://db-engines.com/en/ranking


1.4 关系型数据库理论

1.4.1 E‑R 模型(实体‑联系模型 ERD)

数据库设计建模工具,不绑定具体数据库产品。 三要素:

  1. 实体 Entity :客观事物,ER 图用矩形;同类为实体集。
  2. 属性 Attribute :实体特征;ER 图用椭圆形。
  3. 联系 Relationship :实体之间关联规则;ER 图用菱形。
1.4.2 实体间三种联系类型
  1. 一对一 1:1

    A 对应唯一 B,B 对应唯一 A

    • 人 ↔ 身份证
    • 丈夫 ↔ 妻子
  2. 一对多 1:n

    一个 A 对应多个 B,一个 B 只归属一个 A

    • 一个班级→多个学生
    • 一个部门→多个员工
  3. 多对多 m:n

    :A 可以对应多个 B,B 可以对应多个 A

    • 学生 ↔ 课程(一个学生选多门课,一门课多个学生)
    • 商品 ↔ 订单

示例表结构

一对多:老师表 & 课程表

class_id name teacher_id
1 linux 1
2 golang 1
3 python 2

多对多:学生‑课程中间关联表

class_id stu_id
1 1
1 2
2 1
2 2
1.4.3 CRUD 数据操作

数据库基础操作增查改删

缩写 全称 操作 SQL 关键字
C Create 新增 INSERT
R Read 读取查询 SELECT
U Update 更新 UPDATE
D Delete 删除 DELETE
1.4.4 数据库范式(正规化)

范式目的:降低数据冗余,提升一致性 ;范式等级越高冗余越小。 6 大范式:1NF、2NF、3NF、BCNF、4NF、5NF。实际业务做到 3NF 第三范式 就足够。

1NF 第一范式:原子性

要求:每一列字段必须不可再拆分,不能存放多个值。

反例(违反 1NF)

学生 ID 联系方式
001 13800138000, zhang@example.com

正确

学生 ID 手机号 邮箱
001 13800138000 zhang@example.com

规则:一列只能存一个值,禁止列表、集合复合数据。

2NF 第二范式:消除部分依赖

前提:已经满足 1NF。 要求:所有非主键字段必须完全依赖整个联合主键,不能只依赖主键其中一部分。 主要针对复合主键场景。

反例 主键 =(订单 ID,商品 ID),商品名称只依赖商品 ID,不依赖订单 ID。

订单 ID 商品 ID 商品名称 数量
1001 P001 苹果 5

解决方法:拆分成两张表

  1. 商品表:商品 ID,商品名称
  2. 订单明细表:订单 ID,商品 ID,数量
3NF 第三范式:消除传递依赖

前提:已经满足 1NF、2NF。 要求:非主键字段之间不能互相依赖,不能传递依赖主键。 A → B → C,则 C 传递依赖 A,不允许。

反例 主键:学生 ID;学院地址依赖学院 ID,学院 ID 依赖学生 ID,形成传递依赖。

学生 ID 学院 ID 学院地址
2001 CS01 北京中关村

解决方法:拆分两张表

  1. 学生表:学生 ID,学院 ID
  2. 学院表:学院 ID,学院地址

范式总结对照表

范式 核心目标 关键规则
1NF 原子性 字段值不可再拆分
2NF 消除部分依赖 非主属性完全依赖整个主键(针对复合主键)
3NF 消除传递依赖 非主属性之间不能存在互相依赖

提示:范式越高,表拆分越多;实际开发一般做到 3NF。

1.4.5 SQL 结构化查询语言

SQL 全称 Structured Query Language,专门用于关系数据库存取、查询、管理。

  • 数据库典型工作模式:C/S 客户端服务端架构;服务端监听端口,客户端发送 SQL,服务返回结果。
  • MySQL 支持原生 CLI;也可以使用 Navicat 等 GUI 工具;程序语言使用数据库驱动交互。
SQL 语言五大分类
类型 全称 作用 语句
DDL 数据定义语言 定义库、表结构 CREATE、ALTER、DROP
DML 数据操纵语言 表中数据增删改 INSERT、DELETE、UPDATE
DQL 数据查询语言 查询数据 SELECT
DCL 数据控制语言 权限管控 GRANT、REVOKE
TCL 事务控制语言 事务提交回滚 BEGIN、COMMIT、ROLLBACK、SAVEPOINT
SQL 编写规范
  1. SQL 关键字大小写不敏感,生产习惯关键字大写;库名表名区分大小写;
  2. 语句以分号 ; 结尾;支持单行、多行书写;
  3. 关键字不能换行拆分;
  4. 使用空格、Tab 缩进,子句独立一行提升可读性。
SQL 注释写法
复制代码
-- 单行注释(标准SQL)

/*
多行注释
可以写多行内容
*/

# mysql特有单行注释
数据库对象命名规则

对象:数据库、表、索引、视图、存储过程、用户、触发器等

  • 允许字符:字母,数字,# _ $
  • 禁止直接使用 MySQL 保留关键字,如果使用需要用反引号 ```包裹。

*学习复盘

  1. 数据分为结构化、半结构化、非结构化,不同数据适合不同存储方案;
  2. 数据库系统阶段解决了文件系统的冗余、并发、安全短板;
  3. E‑R 模型是数据库设计的前置工具:实体、属性、联系,1:1 /1:n /m:n 三种关系;
  4. 三大范式核心:原子性、消除部分依赖、消除传递依赖,日常开发优先满足 3NF 即可;
  5. SQL 分为 DDL、DML、DQL、DCL、TCL 五大类,不同语句各司其职。

思考:什么时候可以不遵守范式?当业务查询压力大,为减少多表 JOIN,可以做适度反范式,牺牲一点冗余换取性能。

未完待续,下一节进入 MySQL 实操环节,上手敲命令!

相关推荐
我不是程序员三三1 小时前
透明加密软件偶发解密异常排错实录:文件时能打开时乱码
数据库·域智盾
snhna1 小时前
向量数据库深度实战:从 HNSW 到 pgvector、Milvus 选型与 RAG 落地
数据库·人工智能·python·postgresql·milvus
天行健,君子而铎2 小时前
数据分类分级的范式转换:从规则匹配到场景化高准确率一键部署
网络·数据库·安全
牛战士coding2 小时前
MySQL 读写分离完整链路:主从复制、多数据源与 @DS 路由
数据库·mysql
goehou3 小时前
MCP 查数实战:让 LLM 安全地查数据库(只读账号、SQL 校验、参数漂移)
数据库·ai·llm·教程·mcp·function calling
我不会插花弄玉3 小时前
7.函数【由浅入深-MySQL】
android·数据库·mysql
周小董3 小时前
[1369]Windows上安装PostgreSQL
数据库·windows·postgresql
wewowilling4 小时前
认识微服务
java·运维·微服务·springcloud
玖石书4 小时前
Ubuntu 24.04 UFW 全命令攻略:从入门到端口开放实战
linux·运维·ubuntu