news 2026/6/4 1:29:38

MySQL 学习笔记(第一期):数据库基础与 MySQL 初探

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MySQL 学习笔记(第一期):数据库基础与 MySQL 初探

MySQL 学习笔记(第一期):数据库基础与 MySQL 初探

本系列笔记涵盖数据库基础理论、MySQL 安装与使用、SQL 语言、备份恢复、高可用架构及项目实战。第一期聚焦数据库核心概念、关系型数据库理论及 MySQL 入门使用,为后续学习打下坚实基础。


一、数据的分类

在数据获取和使用过程中,根据结构类型可分为三类:

类型特点示例
结构化数据用二维表逻辑表达,固定格式和有限长度,先有结构后有数据关系型数据库中的表
半结构化数据不符合关系型数据模型,但包含标签或标记分隔语义,先有数据后有结构JSON、XML、HTML
非结构化数据没有固定结构,无法用二维表表示,整体存储音视频、二进制文件、位置信息

结构化数据范例(二维表)

nameage
唐三123
叶凡456

半结构化数据范例(JSON)

json

[ {"id": 1, "name": "唐三", "age": 123}, {"id": 2, "name": "叶凡", "age": 456} ]

二、数据管理发展历史

阶段时间特点
人工管理1950年代中期以前科学计算,磁带/纸带存储,无管理软件,批处理
文件系统管理1950年代后期~1960年代中期磁盘出现,文件系统管理,长期保存,批处理+联机处理
数据库系统阶段1960年代后期至今大容量磁盘,DBMS管理,复杂数据模型,高独立性,低冗余

文件系统优缺点

  • 优点:格式多样,数据长期保存,一定独立性
  • 缺点:应用程序对接不便,无并发控制,无安全控制,数据冗余不可避免

三、数据库管理系统(DBMS)

3.1 核心概念

术语说明
数据库(Database)长期存储在计算机内的、有组织的、可共享的大量数据集合
DBMS操纵和管理数据库的大型软件,如 MySQL、Oracle
DBA数据库管理员,负责设计、测试、部署、维护数据库
应用程序通过 DBMS 访问数据库的软件程序

3.2 DBMS 特点与基本功能

特点

  • 复杂数据模型,数据冗余小,易扩充
  • 数据和程序独立(物理独立 + 逻辑独立)
  • 统一查询接口
  • 并发控制、备份恢复、完整性/安全性保障

基本功能

  1. 数据定义(DDL)
  2. 数据操作(DML)
  3. 数据组织、存储与管理
  4. 数据库运行管理(并发、事务、恢复)
  5. 数据库维护(载入、转换、转储、重组)
  6. 数据库保护(恢复、并发、完整性、安全性)
  7. 通信(与操作系统、网络软件交互)

3.3 数据库发展分类

  • 层次数据库:树状模型,一对多关系(代表:IBM IMS)
  • 网状数据库:网络结构,多对多关系
  • 关系型数据库(RDBMS):二维表模型,代表:MySQL、Oracle、PostgreSQL、SQL Server

3.4 RDBMS 核心术语

术语含义
数据库表的集合
数据的矩阵,行列结构
列(column)相同类型数据的集合
行(row)一条记录(元组)
冗余存储两倍数据,提高安全性但降低性能
主键(Primary Key)唯一标识一行,一个表只能有一个
外键(Foreign Key)关联两个表
复合键多列组合作为索引键
索引加速查询,类似书的目录
参照完整性不允许引用不存在的实体

MySQL 表结构示例

IDNamePriceQty
1白菜2.00200
2土豆2.60300
3青菜6.00150

四、关系型数据库理论

4.1 E-R 模型(实体关系模型)

  • 实体(Entity):客观存在的事物,用矩形表示
  • 属性(Attribute):实体的特性,用椭圆形表示
  • 联系(Relationship):实体之间的关联规则,用菱形表示

4.2 联系类型

联系类型说明示例
一对一 (1:1)A 对应一个 B,B 对应一个 A人 ↔ 身份证
一对多 (1:n)A 对应多个 B,B 只对应一个 A班级 → 学生
多对多 (m:n)A 对应多个 B,B 对应多个 A学生 ↔ 课程

表结构示例

sql

-- 学生表(一对一关系的示例) CREATE TABLE student ( stu_id INT PRIMARY KEY, name VARCHAR(20) ); -- 数据:(1, '唐三'), (2, '叶凡') -- 老师表(用于一对多) CREATE TABLE teacher ( teacher_id INT PRIMARY KEY, name VARCHAR(20) ); -- 数据:(1, 'gao'), (2, 'ma') -- 课程表(一对多:一个老师多门课) CREATE TABLE class ( class_id INT PRIMARY KEY, name VARCHAR(20), teacher_id INT ); -- 数据:(1, 'linux',1), (2, 'golang',1), (3, 'python',2), (4, 'java',2) -- 学生与课程多对多关系表(中间表) CREATE TABLE student_class ( class_id INT, stu_id INT ); -- 数据:(1,1), (1,2), (2,1), (3,2)

4.3 数据操作(CRUD)

操作描述SQL 关键字
增加插入数据INSERT
读取查询数据SELECT
更新修改数据UPDATE
删除删除数据DELETE

4.4 数据库规范化(范式)

设计关系数据库时,遵循范式可减少冗余、增进一致性。一般满足第三范式(3NF)即可。

第一范式(1NF):原子性
  • 要求:每个字段不可再分(不能是列表、集合或复合结构)
  • 反例:联系方式字段存13800138000, zhang@example.com
  • 正例:拆分为手机号、邮箱两列
第二范式(2NF):消除部分依赖
  • 前提:满足 1NF
  • 要求:非主键字段必须完全依赖于整个主键(针对复合主键)
  • 反例:订单明细表主键(订单ID, 商品ID),但“商品名称”只依赖“商品ID”
  • 解决方法:拆表(商品表 + 订单明细表)
第三范式(3NF):消除传递依赖
  • 前提:满足 2NF
  • 要求:非主键字段之间不能有依赖关系(如A→B→C,则 C 传递依赖 A)
  • 反例:学生表(学生ID → 学院ID → 学院地址)
  • 解决方法:拆表(学生表 + 学院表)

范式总结

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

实际开发中,一般满足 3NF 即可,不必追求更高范式。

4.5 SQL 结构化查询语言

SQL(Structured Query Language)用于存取、查询、更新和管理关系数据库。MySQL 采用 C/S 模式,使用专有协议通信。客户端发送 SQL 语句,服务端返回结果。


五、MySQL 安装与基本使用

5.1 MySQL 简介与历史

  • 创始人:Michael “Monty” Widenius(女儿名 My,所以叫 MySQL)
  • 1995 年发布第一个内部版本,1996 年对外发布 3.11.1
  • 2000 年改为 GPL 许可,2001 年集成 InnoDB
  • 2008 年被 Sun 收购,2009 年 Oracle 收购 Sun
  • 主流分支:官方 MySQL、Percona Server、MariaDB

5.2 MySQL 特性

  • 开源,免费
  • 标准 SQL 语言
  • 跨平台,支持多种语言
  • 插件式存储引擎
  • 单进程多线程
  • 大量测试组件和扩展

5.3 MySQL 多实例

定义:在一台服务器上运行多个 MySQL 服务端进程,每个进程监听不同端口(如 3306、3307、3308),拥有独立配置和数据。

优点

  • 节约硬件资源
  • 便于对比测试不同版本
  • 便于集中管理(安全、备份、启停)

缺点

  • 资源抢占
  • 单点风险(服务器宕机影响所有实例)

5.4 MySQL 组成和常用工具

服务端主要程序
程序功能
mysqld_safe安全启动脚本
mysqld核心服务程序
mysqld_multi多实例管理工具
客户端主要程序
程序功能
mysql交互式 CLI 客户端
mysqldump备份工具
mysqladmin管理工具
mysqlimport数据导入工具
MyISAM 工具
程序功能
myisamchk检测 MyISAM 表
myisampack打包 MyISAM 表(只读)
配置文件

主要配置文件:/etc/my.cnf,以及/etc/my.cnf.d/目录下的文件。
配置文件读取顺序(从mysql --help查看):

text

/etc/my.cnf -> /etc/mysql/my.cnf -> ~/.my.cnf

5.5 MySQL 客户端使用

常用选项

bash

mysql [OPTIONS] [database] # 常用选项: -u, --user=name # 用户名 -p, --password[=name] # 密码 -h, --host=host # 服务端主机 -P, --port=port # 端口(默认 3306) -S, --socket=name # socket 文件 -D, --database=db # 指定数据库 -e, --execute=sql # 非交互式执行 SQL 后退出 -H, --html # HTML 格式输出 -X, --xml # XML 格式输出 -t, --table # 表格格式(默认) -E, --vertical # 垂直显示 -v, --verbose # 显示详细信息 --prompt=name # 修改命令提示符
使用范例

bash

# 免密登录(注意安全) mysql -uroot -pHuawei@123 # 显示版本 mysql -v # 指定用户名、主机、端口 mysql -uroot -h127.0.0.1 -P3306 # 使用主机名 mysql --user=root --host=localhost --port=3306 # 默认使用 root 空密码登录(仅限测试) mysql # 打印参数列表(不连接) mysql --print-defaults -uroot -hlocalhost --connect-timeout=2 # 以 HTML 格式输出查询结果 mysql -H -e "SELECT VERSION();" # 非交互式执行 SQL 文件 mysql -e "source /root/test.sql" # 或使用重定向 mysql < test.sql # 垂直显示结果 mysql -e "SHOW DATABASES;" -E # 修改命令提示符 mysql --prompt="[\\d]> " # 指定数据库 mysql information_schema
客户端常用命令(在 mysql> 提示符下)
命令简写功能
help?显示帮助
clear\c清除当前输入
connect\r重新连接
delimiter\d设置语句分隔符
edit\e使用编辑器编辑命令
ego\G垂直显示结果
exit/quit\q退出
go\g发送命令到服务端
source\.执行 SQL 脚本文件
status\s获取服务端状态信息
system\!执行系统 shell 命令
use\u切换数据库
tee\T将输出追加到文件
notee\t停止输出到文件

使用范例

sql

-- 显示当前数据库 mysql> \s -- 切换数据库 mysql> use mysql; -- 调用系统命令 mysql> \! hostname mysql> \! clear -- 修改提示符 mysql> prompt [\\h-\\D]> -- 执行 SQL 脚本 mysql> source /path/to/script.sql mysql> \. /path/to/script.sql -- 开启/关闭输出到文件 mysql> \T /tmp/output.txt mysql> \t -- 设置分隔符为 $(默认 ;) mysql> delimiter $ mysql> SELECT * FROM student$ mysql> delimiter ;
mysqladmin 工具(管理工具)

常用命令:

bash

# 显示版本 mysqladmin -V mysqladmin version # 查看状态 mysqladmin status # 设置连接超时 + 静默模式 mysqladmin -h1.2.3.4 --connect-timeout=2 -s ping # 持续执行(每秒 ping 一次,共 3 次) mysqladmin -i 1 -c 3 ping # 关闭服务(不能启动) mysqladmin shutdown # 创建数据库 mysqladmin create db1 # 删除数据库(需确认) mysqladmin drop db1 # 强制删除(无需确认) mysqladmin -f drop db2 # 修改密码(旧密码为空时直接设置) mysqladmin password "123456" # 旧密码存在时 mysqladmin -uroot -p123456 password "abcde"
mycli 工具(增强型 MySQL 客户端)

bash

# 安装(依赖 Python) yum install -y python39 pip3 install mycli==1.2.0 # 使用 mycli -uroot -pabcde

六、本期知识点一览表

知识模块核心要点
数据分类结构化(二维表)、半结构化(JSON/XML)、非结构化(音视频等)
数据管理发展人工管理 → 文件系统 → 数据库系统
DBMS定义、功能(DDL/DML/运行管理/保护/维护)、特点(独立性、低冗余)
关系型数据库二维表模型,主键、外键、索引、参照完整性
E-R 模型实体(矩形)、属性(椭圆)、联系(菱形),三种联系类型(1:1,1:n,m:n)
范式1NF(原子性)、2NF(消除部分依赖)、3NF(消除传递依赖)
SQL结构化查询语言,用于操作关系数据库
MySQL 历史与特性开源、跨平台、插件式引擎、单进程多线程
MySQL 多实例单机多进程,节省资源但有单点风险
核心工具mysqld, mysql, mysqladmin, mysqldump, mycli
客户端选项-u, -p, -h, -P, -e, -H, -E 等
客户端命令\s, \u, !, \T, . , \G, 等
mysqladmin管理操作:创建/删除数据库、修改密码、状态监控、关闭服务

下一期预告:SQL 语言之库/表操作与数据类型(DDL、数据类型详解、表约束、字符集与排序规则)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/4 1:19:57

30分钟搞定!本地私有知识库搭建教程,让你的文档不再受云端束缚!

30 分钟搭建私有知识库 你的文档再也不需要上传到云端 **看完你能得到什么&#xff1a;**一个跑在本地的私有RAG知识库&#xff0c;上传文档后可以直接对话提问。全程断网可用&#xff0c;数据不出你的电脑。 这篇文章适合谁 有不方便上传到公有云的文档&#xff08;合同、内部…

作者头像 李华
网站建设 2026/6/4 1:19:54

Shell 脚本进阶:条件判断 + 循环语句 + 函数封装

shell脚本进阶语法 if 判断语句 if 介绍 if 是条件判断语句&#xff0c;用来做选择&#xff1a;满足某个条件就执行一段命令&#xff0c;不满足就执行别的命令&#xff0c;是脚本最常用的判断。 三种语法结构说明 单分支 if&#xff1a;只有满足条件才执行&#xff0c;不满足直…

作者头像 李华
网站建设 2026/6/4 1:18:02

Python自动下载沪深300日线数据并生成Excel表格(WindPy驱动)

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;用Python调用WindPy库&#xff0c;连接本地Wind金融终端&#xff0c;一键获取沪深300指数的历史日行情数据&#xff0c;包含开盘价、收盘价、最高价、最低价、成交量、成交额等完整字段&#xff1b;支持灵活设置…

作者头像 李华
网站建设 2026/6/4 1:14:55

从DIY角度聊聊:用常见开发板(如STM32)实现一个简易相位激光测距模块的难点在哪?

用STM32实现相位激光测距的五大技术挑战与DIY解决方案在创客社区和硬件爱好者群体中&#xff0c;激光测距一直是个令人着迷的话题。相比商业级产品动辄上万元的价格标签&#xff0c;用一块几十元的STM32开发板搭配自制光学组件实现毫米级测距&#xff0c;这种挑战本身就充满吸引…

作者头像 李华