一、基础概念
核心定义:
数据库(DB):数据存储的仓库;
数据库管理系统(DBMS):管理 DB 的工具(如 MySQL,C/S 架构的关系型 DBMS);
核心功能:数据的增、删、改、查(CRUD);
数据(data):客观事务的原始记录(数字、文字、视频等);
信息(info):经加工后的有效数据。
数据结构分类:
结构化数据:表格形式(行 + 列,字段类型固定);
半结构化数据:HTML、XML、JSON、YAML;
非结构化数据:聊天记录、评论、视频、语音。
二、数据库分类
| 分类维度 | 具体类型 | 核心特点 |
| 数据模型 | 关系型(RDBMS) | 结构化存储,用 SQL 操作(如 MySQL) |
| | 非关系型(NoSQL) | 半 / 非结构化存储,无固定 schema |
| 部署方式 | 本地部署 | 存储在本地服务器 |
| | 云部署 | 云厂商提供的托管服务 |
| 用途场景 | OLTP(在线事务处理) | 日常业务操作(如订单提交、用户注册) |
| | OLAP(在线分析处理) | 数据统计与分析(如报表生成) |
| | HTAP(混合) | 兼顾事务处理与数据分析 |
| 架构模式 | 集中式 | 所有数据存储在单台服务器 |
| | 分布式 | 数据拆分到多台服务器,支持无限扩容 |
| | 云原生 | 基于虚拟化 + 分布式,云厂商提供服务 |
| 存储介质 | 磁盘 | 持久化存储,断电不丢失,I/O 性能较低 |
| | 内存 | 临时缓存,I/O 性能高,断电数据丢失 |
三、SQL 核心语法
| 语言类型 | 作用范围 | 核心操作命令 |
| DDL(数据定义) | 库 / 表 / 索引 / 用户等结构 | CREATE(创建)、ALTER(修改)、DROP(删除)、SHOW(查看) |
| DML(数据操纵) | 表中数据 | INSERT(新增)、UPDATE(修改)、DELETE(删除) |
| DQL(数据查询) | 数据查询 | SELECT(支持筛选、分组、排序、联查、分页) |
| DCL(数据控制) | 权限 / 事务 | GRANT(授权)、REVOKE(回收权限)、USE(切换数据库) |
| DTL(事务控制) | 事务管理 | COMMIT(提交)、ROLLBACK(回滚) |
四、核心实操命令
1. 库表操作
查看所有库:SHOW DATABASES;
创建库:CREATE DATABASE 库名;
删除库:DROP DATABASE 库名;(谨慎使用,会删除库内所有数据)
切换库:USE 库名;
创建表:CREATE TABLE 表名(字段名 数据类型 约束条件,...);
修改表名:ALTER TABLE 原表名 RENAME TO 新表名;
添加字段:ALTER TABLE 表名 ADD COLUMN 字段名 类型 [约束];
删除字段:ALTER TABLE 表名 DROP 字段名;
删除表:DROP TABLE 表名;
2. 基础 CRUD
插入数据:INSERT INTO 表名(字段1,字段2...) VALUES(值1,值2...);
修改数据:UPDATE 表名 SET 字段=新值 WHERE 条件;(必须加 WHERE,避免全表更新)
删除数据:DELETE FROM 表名 WHERE 条件;(必须加 WHERE,避免全表删除)
查询数据:SELECT 字段 FROM 表名 [WHERE 条件];
3. 密码重置(安全模式)
停止 MySQL 服务:systemctl stop mysqld
启动安全模式:mysqld_safe --skip-grant-tables &
无密码登录:mysql -u root
切换系统库:USE mysql;
刷新权限:FLUSH PRIVILEGES;
修改密码:ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';(MySQL8.x);兼容旧插件:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';
退出重启:EXIT; → systemctl start mysqld
五、数据类型与约束
1. 常用数据类型
| 类别 | 类型 | 核心用途 |
| 数值型 | INT | 存储整数(ID、年龄、数量) |
| | BIGINT | 大整数(订单号、海量数据 ID) |
| | DECIMAL(M,D) | 定点数(金额、税率,无精度误差) |
| 字符串型 | VARCHAR (长度) | 可变长字符串(姓名、备注) |
| | CHAR (长度) | 固定长字符串(手机号、身份证号) |
| 日期时间型 | DATETIME | 日期 + 时间(订单创建时间,范围 1000-9999 年) |
| | TIMESTAMP | 时间戳(自动更新,范围 1970-2038 年) |
| | DATE | 仅日期(生日、注册日期) |
2. 约束条件(保障数据完整性)
| 约束类型 | 核心作用 | 特点 |
| 主键(PRIMARY KEY) | 唯一标识表中记录 | 非空 + 唯一,一张表仅一个 |
| 外键(FOREIGN KEY) | 关联两张表,保证表间数据一致性 | 关系型数据库特有,可多个 |
| 非空(NOT NULL) | 强制字段必须赋值 | 不允许空值 |
| 唯一(UNIQUE) | 强制字段值不重复 | 允许一个空值,一张表可多个 |
3. 数据完整性分类
实体完整性:通过主键 / 唯一约束实现(记录唯一可识别);
域完整性:通过数据类型、非空约束实现(字段值符合规则);
参照完整性:通过外键实现(多表关联合法);
用户定义完整性:自定义业务规则(如订单金额 > 0)。
六、查询进阶
1. 核心查询功能
| 查询类型 | 语法关键词 / 核心用法 |
| 比较查询 | WHERE 字段 运算符 值(=、!=、IS NULL 等) |
| 范围查询 | BETWEEN...AND...、IN (值 1, 值 2...)、NOT IN |
| 模糊查询 | LIKE(% 匹配任意字符,_匹配单个字符) |
| 分组查询 | GROUP BY 字段 + HAVING 聚合条件(过滤分组结果) |
| 排序查询 | ORDER BY 字段 [ASC/DESC](默认升序) |
| 分页查询 | LIMIT [偏移量,] 记录数(第 N 页:LIMIT (N-1)*M,M) |
| 多表联查 | INNER JOIN(匹配记录)、LEFT JOIN(左表全显)、RIGHT JOIN(右表全显) |
| 联合查询 | UNION(去重)、UNION ALL(保留重复) |
| 子查询 | 嵌套在主查询中的查询,结果作为主查询条件 / 数据源 |
2. 聚合函数
COUNT ():统计记录数;
SUM ():求和;
AVG ():求平均值;
MAX ():求最大值;
MIN ():求最小值。
七、用户与权限
用户标识:用户名@主机名(主机名:localhost= 本机,%= 任意地址);
常用操作命令:
创建用户:CREATE USER '用户名'@'地址' IDENTIFIED BY '密码';
授权:GRANT 权限1,权限2 ON 库.表 TO '用户名'@'地址';(ALL = 所有权限,.= 所有库表)
回收权限:REVOKE 权限 ON 库.表 FROM '用户名'@'地址';
刷新权限:FLUSH PRIVILEGES;
修改密码(MySQL8.x):ALTER USER '用户名'@'地址' IDENTIFIED BY '新密码';
删除用户:DROP USER '用户名'@'地址';
八、数据备份
备份分类:
逻辑备份:生成 SQL 文件(mysqldump 工具,适合中小型数据);
物理备份:复制数据目录(XtraBackup 工具,热备,适合大数据量);
全量备份:备份所有数据;
增量备份:仅备份新增 / 变更数据。
常用命令:
本地备份:mysqldump -uroot -p 库名 > 备份文件名.sql;
远程备份:mysqldump -uroot -p -hIP地址 库名 > 备份文件名.sql;
XtraBackup 安装核心步骤:安装依赖(libssl1.1)→ 配置 Percona 仓库 → 安装 percona-xtrabackup-80。
九、核心特性
1. 事务(ACID 特性)
原子性(Atomicity):操作要么全成,要么全败;
一致性(Consistency):事务前后数据状态合法;
隔离性(Isolation):并发事务互不干扰(默认 RR 级别,避免脏读);
持久性(Durability):提交后数据永久保存。
并发问题:脏读(读未提交数据)、不可重复读(同一数据多次读取结果不一致)、幻读(查询无数据但插入时冲突);
隔离级别:Read uncommitted(读未提交)→ Read committed(读已提交)→ Repeatable read(可重复读,MySQL 默认)→ Serializable(串行化,最高级别)。
2. 视图
定义:基于 SELECT 语句的虚拟表,不存储实际数据,原表变更会同步;
功能:简化复杂查询、隐藏敏感字段、统一数据访问接口;
常用命令:CREATE VIEW 视图名 AS 查询语句;、ALTER VIEW 视图名 AS 新查询;、DROP VIEW 视图名;。
3. 存储引擎
| 引擎 | 核心特点 | 适用场景 |
| InnoDB(默认) | 支持事务、行级锁、聚簇索引 | 高并发、高安全场景(金融、电商) |
| MyISAM | 不支持事务、表级锁、读性能好 | 读多写少场景(博客、静态网站) |
| MEMORY | 内存存储、读写快、断电丢失 | 临时缓存数据 |
| CSV | 文本存储、逗号分隔、兼容性强 | 简单数据存储(日志、数据交换) |
4. 索引
定义:基于 B + 树等数据结构,加速查询(类似字典目录);
优缺点:查询提速,但占用存储,降低增删改效率;
核心类型:
主键索引:聚簇索引,唯一非空;
唯一索引:值唯一,允许一个空值;
普通索引:无唯一性约束;
联合索引:多字段组合;
覆盖索引:包含查询所需所有字段(无需回表);
底层结构(InnoDB):B + 树(叶子节点存数据 / 主键,非叶子节点存索引键 + 指针,支持范围查询 / 排序)。
5. 锁机制
作用:解决并发事务冲突(脏读、幻读等);
核心分类:
颗粒度:全局锁(锁整个库)、表级锁(锁整张表)、行级锁(锁单行数据);
属性:共享锁(读读共享、读写互斥)、排他锁(写写 / 读写互斥);
模式:悲观锁(先锁后操作,写多读少)、乐观锁(先操作后验证,读多写少);
死锁:多事务循环等待对方锁资源,需按固定顺序锁资源避免。
十、数据类型命令使用
5种常用数据类型
INT(数值型):存储学生 ID、年龄;
BIGINT(数值型):存储订单号、海量用户 ID;
VARCHAR(字符串型):存储姓名、地址;
CHAR(字符串型):存储手机号、身份证号;
DATETIME(日期型):存储订单创建时间、登录时间。
创建 student 表:
CREATE TABLE student(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
age INT,
score FLOAT(5,2),
create_time DATETIME DEFAULT CURRENT_TIMESTAMP
);
插入单条数据:
INSERT INTO student(name, age, score) VALUES('张三', 21, 89.00);
查询所有数据并按 score 降序:
SELECT * FROM student ORDER BY score DESC;
查询 age18-22、score≥80 的姓名和分数(按 age 升序):
SELECT name, score FROM student WHERE age BETWEEN 18 AND 22 AND score >= 80 ORDER BY age;
5 个聚合函数:
COUNT ():统计记录总数;
SUM ():计算字段总和;
AVG ():计算字段平均值;
MAX ():获取字段最大值;
MIN ():获取字段最小值。
按 age 分组统计人数和平均分数(人数≥2):
SELECT age, COUNT(*) AS num, AVG(score) AS avg_score FROM student GROUP BY age HAVING num >= 2;
更新 id=5 的学生信息:
UPDATE student SET score = 95, age = 20 WHERE id = 5;
删除 score<60 且 age>25 的学生:
DELETE FROM student WHERE score < 60 AND age > 25;
主键与外键的核心区别:
- 主键(PRIMARY KEY):作用于单表,唯一标识记录(非空 + 唯一),一张表仅一个;
- 外键(FOREIGN KEY):作用于两张表,关联主从表数据(保证一致性),一张表可多个。
1万+

被折叠的 条评论
为什么被折叠?



