一、数据的三种分类
数据按照存储结构分为结构化、半结构化、非结构化三类。
-
结构化数据 可以用二维表格描述,先定义结构,再存入数据,典型就是MySQL数据表。每行代表一条实体记录,字段固定,有属性、元组概念。
例子:学生信息表,学号、姓名、年龄字段提前定义好。
-
半结构化数据 介于结构化和无结构之间,自描述数据,先有数据再有结构,自带标记分层。
例子:JSON、XML、HTML,NoSQL部分数据。
-
非结构化数据 没有固定格式,整体存储,不能用二维表表示。
例子:图片、音频、视频、二进制文件。
二、数据管理发展的三个阶段
- 人工管理阶段(50年代中期前) 没有专门管理软件,只有磁带、纸带,全部人工处理,只有批处理。
- 文件系统阶段(50后期‑60中期) 磁盘出现,用文件保存数据,可以联机实时处理。缺点:数据冗余大,没有统一访问接口,并发、安全控制弱。
- 数据库系统阶段(60年代后期至今) 诞生DBMS数据库管理系统,实现数据共享、低冗余、高独立性,程序和数据解耦,也是我们现在使用的模式。
基础名词概念
- Database 数据库:长期存储、有组织、可共享的数据集合。
- DBMS数据库管理系统:操纵管理数据库的大型软件,提供DDL/DML,负责并发、备份、安全、完整性。
- DBA数据库管理员:负责数据库部署、运维、故障处理,保障稳定性、安全性、高可用。
DBMS分为三代模型:层次模型(树状,一对多,IBM IMS)、网状模型(多对多)、关系模型(二维表,MySQL、Oracle)。
三、E‑R模型 & 实体联系
E‑R图用来做数据库设计,由三部分组成:
- 实体(矩形):客观事物,例如学生、课程。
- 属性(椭圆形):实体的特征,学生的姓名、学号。
- 联系(菱形):实体之间关系。
联系分为3种:
1:1一对一:人 ↔ 身份证1:n一对多:班级 ↔ 学生m:n多对多:学生 ↔ 课程,需要中间关联表。
四、数据库三大范式(做表设计必看)
范式目的:减少数据冗余,避免异常,一般业务满足3NF即可
- 1NF第一范式:原子性 字段不可再拆分,一个单元格只存一个值。 ❌反例:
联系方式:手机号,邮箱写在同一列。 - 2NF第二范式:消除部分依赖 满足1NF基础上,所有非主键字段必须完全依赖整个主键,不能只依赖联合主键其中一部分。
- 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;
六、多表连接查询(面试高频)
- INNER JOIN 内连接:只返回两边匹配成功的数据(交集)
- LEFT JOIN 左连接:左表全部保留,右表匹配不到填NULL
- RIGHT JOIN 右连接:右表全部保留,左表匹配不到填NULL
- CROSS JOIN交叉连接:笛卡尔积,开发几乎不用
- 自连接:一张表自己连接自己,处理上下级、邀请关系
- 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博客:
- web节点安装httpd、php相关扩展;
- mysql节点创建wordpress数据库、创建业务账号并授权远程访问;
- web下载wordpress源码,配置虚拟主机;
- 修改windows hosts做域名解析,浏览器访问完成博客安装。
九、备份与恢复
数据丢失原因:人为误操作、程序bug、磁盘硬件损坏、灾难。
- 逻辑备份:mysqldump,导出SQL语句,数据库运行状态下做备份。
- 物理备份:直接复制数据库底层数据文件;冷备份需要关闭数据库。
生产环境必须定期备份,防止删库跑路!