MySQL 数据库学习总结|理论 + SQL 实训完整笔记

一、数据的三种分类

数据按照存储结构分为结构化、半结构化、非结构化三类。

  1. 结构化数据 可以用二维表格描述,先定义结构,再存入数据,典型就是MySQL数据表。每行代表一条实体记录,字段固定,有属性、元组概念。

    例子:学生信息表,学号、姓名、年龄字段提前定义好。

  2. 半结构化数据 介于结构化和无结构之间,自描述数据,先有数据再有结构,自带标记分层。

    例子:JSON、XML、HTML,NoSQL部分数据。

  3. 非结构化数据 没有固定格式,整体存储,不能用二维表表示。

    例子:图片、音频、视频、二进制文件。

二、数据管理发展的三个阶段

  1. 人工管理阶段(50年代中期前) 没有专门管理软件,只有磁带、纸带,全部人工处理,只有批处理。
  2. 文件系统阶段(50后期‑60中期) 磁盘出现,用文件保存数据,可以联机实时处理。缺点:数据冗余大,没有统一访问接口,并发、安全控制弱。
  3. 数据库系统阶段(60年代后期至今) 诞生DBMS数据库管理系统,实现数据共享、低冗余、高独立性,程序和数据解耦,也是我们现在使用的模式。

基础名词概念

  • Database 数据库:长期存储、有组织、可共享的数据集合。
  • DBMS数据库管理系统:操纵管理数据库的大型软件,提供DDL/DML,负责并发、备份、安全、完整性。
  • DBA数据库管理员:负责数据库部署、运维、故障处理,保障稳定性、安全性、高可用。

DBMS分为三代模型:层次模型(树状,一对多,IBM IMS)、网状模型(多对多)、关系模型(二维表,MySQL、Oracle)。

三、E‑R模型 & 实体联系

E‑R图用来做数据库设计,由三部分组成:

  1. 实体(矩形):客观事物,例如学生、课程。
  2. 属性(椭圆形):实体的特征,学生的姓名、学号。
  3. 联系(菱形):实体之间关系。

联系分为3种:

  • 1:1一对一:人 ↔ 身份证
  • 1:n一对多:班级 ↔ 学生
  • m:n多对多:学生 ↔ 课程,需要中间关联表。

四、数据库三大范式(做表设计必看)

范式目的:减少数据冗余,避免异常,一般业务满足3NF即可

  1. 1NF第一范式:原子性 字段不可再拆分,一个单元格只存一个值。 ❌反例:联系方式:手机号,邮箱写在同一列。
  2. 2NF第二范式:消除部分依赖 满足1NF基础上,所有非主键字段必须完全依赖整个主键,不能只依赖联合主键其中一部分。
  3. 3NF第三范式:消除传递依赖 满足2NF,非主键字段不能互相推导、传递依赖主键。 ❌反例:学生表里面同时存学院ID、学院地址;学院地址通过学院ID就能得到,属于传递依赖,需要拆分成两张表。
范式 核心
1NF 字段原子不可拆分
2NF 消除对主键的部分依赖
3NF 消除传递依赖

五、SQL五大语言分类

分类 全称 作用 关键字
DDL 数据定义语言 定义库、表结构 CREATE、DROP、ALTER
DML 数据操纵语言 增删改表内数据 INSERT、DELETE、UPDATE
DQL 数据查询语言 查询数据 SELECT
DCL 数据控制语言 账号权限管理 GRANT、REVOKE
TCL 事务控制 事务提交回滚 BEGIN、COMMIT、ROLLBACK

重点实操命令

1. 库操作
bash 复制代码
-- 创建数据库
CREATE DATABASE school DEFAULT CHARACTER SET utf8mb4;
-- 查看数据库
SHOW DATABASES;
-- 删除数据库
DROP DATABASE IF EXISTS school;
2. 表操作
bash 复制代码
USE school;
CREATE TABLE info (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(10) NOT NULL,
score DECIMAL(5,2),
address VARCHAR(50) DEFAULT '南京'
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

DESC info; -- 查看表结构
3. DML增删改
bash 复制代码
insert into info(name,score) values ('张三',88);
update info set score=90 where id=1;
delete from info where id=1;

⚠️ update / delete 一定要加where条件 ,否则全表修改/删除!生产禁止裸写delete from 表名;。

4. DQL查询,单表常用
bash 复制代码
select * from info;
select name,score from info where score>60;
select * from info order by score desc;
select * from info limit 0,3; --分页
select count(*),avg(score) from info group by gender;

六、多表连接查询(面试高频)

  1. INNER JOIN 内连接:只返回两边匹配成功的数据(交集)
  2. LEFT JOIN 左连接:左表全部保留,右表匹配不到填NULL
  3. RIGHT JOIN 右连接:右表全部保留,左表匹配不到填NULL
  4. CROSS JOIN交叉连接:笛卡尔积,开发几乎不用
  5. 自连接:一张表自己连接自己,处理上下级、邀请关系
  6. UNION / UNION ALL:把查询结果上下拼接,UNION自动去重,UNION ALL更快不去重

MySQL不直接支持FULL JOIN全外连接,用LEFT JOIN UNION RIGHT JOIN模拟。

七、MySQL用户与权限

MySQL账号格式:'用户名'@'允许访问的主机',用户名+主机才是完整账号。 %代表通配符,允许任意IP访问。

bash 复制代码
-- 创建用户
create user 'test'@'192.168.108.%' identified by '123456';
-- 授权
grant all on school.* to 'test'@'192.168.108.%';
-- 回收权限
revoke all on school.* from 'test'@'192.168.108.%';
-- 查看权限
show grants for 'test'@'192.168.108.%';

注意:新建用户只有连接权限USAGE,必须授权才能操作库表。

八、LAMP架构实战理解

LAMP = Linux + Apache + MySQL + PHP,搭建动态网站。

  • L:Linux操作系统
  • A:Apache httpd网页服务
  • M:MySQL数据库,存放网站数据
  • P:PHP,解析动态网页代码

实验部署WordPress博客:

  1. web节点安装httpd、php相关扩展;
  2. mysql节点创建wordpress数据库、创建业务账号并授权远程访问;
  3. web下载wordpress源码,配置虚拟主机;
  4. 修改windows hosts做域名解析,浏览器访问完成博客安装。

九、备份与恢复

数据丢失原因:人为误操作、程序bug、磁盘硬件损坏、灾难。

  • 逻辑备份:mysqldump,导出SQL语句,数据库运行状态下做备份。
  • 物理备份:直接复制数据库底层数据文件;冷备份需要关闭数据库。

生产环境必须定期备份,防止删库跑路!

相关推荐
Decay__23 分钟前
05_MySQL 常用 SQL 大全 —— 诊断、管理、优化辅助 SQL 与三大系统库速查
运维·数据库·sql·mysql·架构
代码山河3 小时前
Python就业方向全解析:后端、爬虫、数据分析、AI你选哪个?
python·学习·架构·教程·面向对象·项目
释厄6233 小时前
AI学习层更新与跨体转移律——人类社会同构·不缺理解缺 U
人工智能·学习
小徐不徐说5 小时前
C++ 接口与插件设计:从工厂注册到 Qt 动态插件
数据库·c++·qt·系统架构·程序设计
论文复现现场5 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算
Decay__6 小时前
04_MySQL DBA 日常运维手册 —— 会话管理、锁与阻塞、事务监控、慢查询与日志巡检
运维·数据库·sql·mysql·架构
小嘉丶学长7 小时前
Day14 · 字典与集合
java·开发语言·网络·python·学习·1024程序员节
心梦缘-雪雁7 小时前
SQL Server 查询数据存在哪个表里
数据库
小李不想当小白8 小时前
SPI通信外设与W25Q64 (硬件SPI)(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
lusklusklusk8 小时前
Python 巡检脚本:进程运行状态、数据库写入时效检查及邮件通知与告警
数据库·python·oracle