关系型数据库从入门到精通:MySQL 核心知识全解析
目录
一、关系型数据库(RDBMS)基础概念
1. 核心术语解析
2. 常见关系型数据库对比
二、MySQL 实战入门:安装与配置
1. MySQL 下载与版本选择
2. 安装步骤(Windows 为例)
3. 环境变量配置
4. 核心配置文件(my.ini)
5. 登录与基础操作
三、MySQL 核心操作:数据库与表管理
1. 数据库操作(DDL)
2. 表操作(DDL)
(1)创建表
(2)修改表结构
(3)查看与删除表
四、数据操作(DML):CRUD 核心语法
1. 插入数据(Create)
2. 查询数据(Read)
3. 更新数据(Update)
4. 删除数据(Delete)
五、数据类型与约束:设计健壮表结构
1. 常用数据类型
2. 六大约束类型
六、数据库设计:三大范式与表关系
1. 三大范式(NF)
2. 表关系设计
七、高级查询:聚合、关联与子查询
1. 聚合函数与分组查询
2. 关联查询(JOIN)
3. 子查询
八、事务与索引:数据安全与性能优化
1. 事务(ACID 特性)
2. 索引:提升查询性能
九、非关系型数据库简介
总结
数据库作为数据存储与管理的核心,是后端开发、数据分析等领域的必备技能。本文将围绕关系型数据库(RDBMS)展开,从基础概念到实战操作,全面解析 MySQL 的核心知识,帮助你系统掌握数据库设计与应用。
一、关系型数据库(RDBMS)基础概念
关系型数据库(Relational Database Management System,RDBMS)是基于关系模型(二维表格结构)构建的数据库系统,其核心特点是通过表格之间的关联关系组织数据,确保数据的一致性和完整性。
1. 核心术语解析
- 数据库(Database):存储数据的容器,一个数据库可包含多个表。
- 表(Table):由行和列组成的二维结构,用于存储一类数据(如用户表、订单表)。
- 行(Row):表中的一条记录,对应一个具体的数据对象(如一个用户的信息)。
- 列(Column):表中的一个字段,定义数据的类型(如 “用户名”“年龄”)。
- 主键(Primary Key):唯一标识表中每行记录的字段(或组合字段),确保记录唯一性,一张表只能有一个主键。
- 外键(Foreign Key):用于关联两个表的字段,通常是另一个表的主键,维护表之间的关联关系。
2. 常见关系型数据库对比
不同场景下需选择合适的 RDBMS,以下是主流数据库的特点与适用场景:
数据库 | 定位 | 特点 | 适用场景 |
---|---|---|---|
Oracle | 大型数据库 | 功能强大、稳定性高、支持高并发,闭源收费 | 金融、电信等核心业务系统 |
SQL Server | 企业级数据库 | 微软生态集成好,易用性强,支持复杂业务逻辑 | Windows 环境下的企业应用 |
MySQL | 企业级 / 开源 | 开源免费、轻量高效、跨平台,支持多种存储引擎 | Web 应用、中小型系统 |
SQLite | 小型文件型 | 无需独立服务,数据存储在单一文件中,嵌入式集成 | 移动端、本地应用、轻量工具 |
注意:所有关系型数据库均使用SQL(结构化查询语言) 操作数据,语法大同小异,掌握 SQL 后可快速迁移到不同数据库。
二、MySQL 实战入门:安装与配置
MySQL 作为最流行的开源数据库,是入门 RDBMS 的首选。以下是从安装到基础配置的完整指南。
1. MySQL 下载与版本选择
- 官方下载地址:https://www.mysql.com/downloads/
- 版本选择:
- Enterprise Edition(企业版):功能齐全、稳定性高,适合生产环境,收费。
- Community Edition(社区版):开源免费,包含核心功能,适合学习和中小型应用,推荐下载 “MySQL Installer for Windows”(支持 5.7/8.0 版本)。
2. 安装步骤(Windows 为例)
- 运行安装程序,选择 “Custom” 自定义安装,勾选 “MySQL Server” 及必要组件。
- 选择安装路径(建议默认路径,避免中文目录)。
- 配置服务器类型:开发环境选 “Development Computer”,生产环境选 “Server Computer”。
- 设置 root 用户密码(牢记密码,后续登录需使用)。
- 完成安装后,勾选 “Start the MySQL Server at System Startup” 确保开机启动。
3. 环境变量配置
为方便在命令行操作 MySQL,需配置环境变量:
- 找到 MySQL 安装目录的
bin
文件夹(默认路径:C:\Program Files\MySQL\MySQL Server 8.0\bin
)。 - 右键 “此电脑”→“属性”→“高级系统设置”→“环境变量”,在 “系统变量” 的
Path
中添加上述bin
路径。 - 验证配置:打开命令行,输入
mysql --version
,显示版本信息即配置成功。
4. 核心配置文件(my.ini)
MySQL 的核心配置文件my.ini
(默认路径:C:\ProgramData\MySQL\MySQL Server 8.0\my.ini
)需重点关注以下参数:
[mysqld]
port=3306 # 端口号(默认3306,冲突时可修改)
datadir=C:/ProgramData/MySQL/MySQL Server 8.0/Data # 数据存储目录
default-storage-engine=INNODB # 默认存储引擎(推荐INNODB)
max_connections=151 # 最大连接数(根据服务器性能调整)
character-set-server=utf8mb4 # 默认字符集(支持 emoji 表情)
修改配置后需重启 MySQL 服务生效(命令行:net stop mysql
→ net start mysql
)。
5. 登录与基础操作
通过命令行登录 MySQL:
# 本地登录(默认端口3306)
mysql -u root -p
# 输入密码后登录成功,显示 "mysql>" 提示符# 远程登录(指定IP和端口)
mysql -u root -p -h 192.168.1.100 -P 3306
常用退出命令:quit
或 exit
(MySQL 命令不区分大小写,以分号结尾)。
三、MySQL 核心操作:数据库与表管理
掌握数据库和表的创建、修改、删除是操作 MySQL 的基础,以下是必备命令与示例。
1. 数据库操作(DDL)
操作 | 语法示例 |
---|---|
查看所有数据库 | show databases; |
创建数据库 | create database if not exists mydb charset=utf8mb4; (指定字符集) |
删除数据库 | drop database if exists mydb; (谨慎操作,数据不可恢复) |
切换数据库 | use mydb; (操作表前必须先切换到目标数据库) |
查看当前数据库 | select database(); |
2. 表操作(DDL)
表是存储数据的核心载体,需掌握表的创建、修改和结构查看。
(1)创建表
-- 创建用户表(包含主键、非空、默认值等约束)
create table if not exists users (id int primary key auto_increment, -- 自增主键username varchar(50) not null unique, -- 用户名(非空+唯一)age int check (age > 0), -- 年龄(检查约束:必须大于0)sex varchar(2) default '男', -- 性别(默认值)create_time datetime default current_timestamp -- 创建时间(默认当前时间)
) engine=INNODB charset=utf8mb4;
(2)修改表结构
-- 修改表名
alter table users rename to user_info;-- 修改列名和类型
alter table user_info change age user_age int not null;-- 添加列
alter table user_info add phone varchar(20) unique;-- 删除列
alter table user_info drop phone;
(3)查看与删除表
-- 查看当前数据库所有表
show tables;-- 查看表结构(字段、类型、约束)
desc user_info; -- 或 describe user_info;-- 删除表
drop table if exists user_info;
四、数据操作(DML):CRUD 核心语法
CRUD(Create/Read/Update/Delete)是数据操作的四大核心,掌握其语法是实现业务功能的基础。
1. 插入数据(Create)
-- 全列插入(按表结构顺序赋值)
insert into users (username, age, sex)
values ('张三', 20, '男'), ('李四', 22, '女'); -- 支持批量插入-- 缺省插入(指定部分列,其他用默认值)
insert into users set username='王五', age=25; -- 仅插入必填列
注意:插入的值需与列的类型和约束匹配(如非空列必须赋值)。
2. 查询数据(Read)
-- 查询所有列(不推荐,性能差)
select * from users;-- 查询指定列并起别名
select username as '用户名', age as '年龄' from users;-- 条件查询(where子句)
select * from users where age > 18 and sex = '男';-- 排序(order by)
select * from users order by age desc; -- 按年龄降序(asc为升序,默认)-- 分页查询(limit)
select * from users limit 0, 10; -- 第1页,每页10条(分页公式:limit (m-1)*n, n)
3. 更新数据(Update)
-- 带条件更新(必须加where,否则全表更新)
update users set age=21 where username='张三';-- 批量更新
update users set sex='女' where age < 18;
4. 删除数据(Delete)
-- 带条件删除(必须加where,否则全表数据删除)
delete from users where username='李四';-- 清空表(保留表结构,数据不可恢复)
truncate table users; -- 比delete快,不触发事务回滚
五、数据类型与约束:设计健壮表结构
合理选择数据类型和约束是保证数据完整性和性能的关键。
1. 常用数据类型
类型分类 | 具体类型 | 特点与适用场景 |
---|---|---|
整数 | tinyint (1 字节) | 小整数(-128~127),适合存储状态(如 0/1) |
int (4 字节) | 常用整数(-20 亿~20 亿),适合 ID、年龄等 | |
bigint (8 字节) | 大整数(-900 亿亿~900 亿亿),适合订单号、雪花 ID 等 | |
浮点数 | decimal(M,D) | 高精度小数(M 总长度,D 小数位),适合金额、价格(避免 float/double 精度丢失) |
字符串 | varchar(N) | 可变长度字符串(N 最大 65535),适合用户名、标题等(按需分配长度) |
text | 长文本(最大 64KB),适合文章内容、描述等 | |
时间 | datetime | 日期时间(1000-01-01~9999-12-31),不受时区影响 |
timestamp | 时间戳(1970-01-01~2038-01-19),受时区影响,适合记录创建 / 更新时间 | |
枚举 | enum (' 值 1',' 值 2') | 枚举类型,只能选预设值,适合性别(男 / 女)、状态(启用 / 禁用)等 |
2. 六大约束类型
约束用于限制表中数据的规则,确保数据的正确性和一致性:
约束类型 | 关键字 | 作用示例 |
---|---|---|
主键约束 | primary key | id int primary key (唯一标识记录,自增主键常用 auto_increment ) |
唯一约束 | unique | username varchar(50) unique (字段值不可重复) |
非空约束 | not null | age int not null (字段值不能为空) |
默认约束 | default | sex varchar(2) default '男' (未赋值时使用默认值) |
检查约束 | check | check(age > 0) (限制字段值范围) |
外键约束 | foreign key | 关联其他表的主键,如 foreign key(teacher_id) references teacher(id) |
外键示例:创建学生表关联教师表(一对多关系)
create table student (id int primary key auto_increment,name varchar(50) not null,teacher_id int,-- 外键关联教师表主键,级联更新/删除constraint fk_teacher foreign key(teacher_id) references teacher(id) on update cascade -- 主表更新时,从表同步更新on delete set null -- 主表删除时,从表设为null
);
六、数据库设计:三大范式与表关系
合理的数据库设计能减少数据冗余、提高查询效率,三大范式是设计的核心原则。
1. 三大范式(NF)
-
第一范式(1NF):每列必须是不可分割的原子值(避免重复组)。
❌ 反例:联系方式
列存储 “13800138000,123456@qq.com”(可分割)。
✅ 正例:拆分为phone
和email
两列。 -
第二范式(2NF):非主键列必须完全依赖主键(消除部分依赖)。
❌ 反例:订单表(订单 ID, 产品 ID, 产品名称)中 “产品名称” 依赖产品 ID(非主键)。
✅ 正例:拆分为订单表(订单 ID, 产品 ID)和产品表(产品 ID, 产品名称)。 -
第三范式(3NF):非主键列不能依赖其他非主键列(消除传递依赖)。
❌ 反例:学生表(学号,学院,学院电话)中 “学院电话” 依赖 “学院”(非主键)。
✅ 正例:拆分为学生表(学号,学院)和学院表(学院,学院电话)。
2. 表关系设计
表之间的关系分为三种,需通过外键合理设计:
- 一对一:如 “用户表” 与 “用户详情表”,外键可放在任意表(通常放数据少的表)。
- 一对多:如 “班级表” 与 “学生表”,外键放在 “学生表”(多方)。
- 多对多:如 “学生表” 与 “课程表”,需通过中间表(如 “选课表”)存储双方主键。
七、高级查询:聚合、关联与子查询
复杂业务场景需通过高级查询实现数据提取,以下是核心技巧。
1. 聚合函数与分组查询
聚合函数用于统计数据,常与 group by
结合使用:
-- 统计每个性别的人数和平均年龄
select sex, count(*) as '人数', avg(age) as '平均年龄'
from users
group by sex
having 人数 > 5; -- 对分组结果过滤(区别于where)
常用聚合函数:count()
(计数)、sum()
(求和)、avg()
(平均值)、max()
(最大值)、min()
(最小值)。
2. 关联查询(JOIN)
关联查询用于合并多个表的数据,核心类型包括:
-- 内连接(取两表交集)
select u.username, o.order_id
from users u
inner join orders o on u.id = o.user_id;-- 左外连接(取左表全部,右表匹配数据)
select u.username, o.order_id
from users u
left join orders o on u.id = o.user_id;
3. 子查询
子查询是嵌套在其他查询中的查询,用于复杂条件过滤:
-- 查询年龄大于平均年龄的用户
select * from users
where age > (select avg(age) from users);
八、事务与索引:数据安全与性能优化
事务确保数据一致性,索引提升查询效率,是 MySQL 进阶的核心。
1. 事务(ACID 特性)
事务是一组原子性操作,要么全成功,要么全回滚,核心特性 ACID:
- 原子性(Atomicity):操作不可分割。
- 一致性(Consistency):事务前后数据状态合法。
- 隔离性(Isolation):并发事务互不干扰。
- 持久性(Durability):提交后数据永久保存。
事务操作示例:
start transaction; -- 开启事务
update account set balance = balance - 100 where id = 1; -- 扣钱
update account set balance = balance + 100 where id = 2; -- 加钱
commit; -- 提交事务(成功则永久生效)
-- rollback; -- 若出错,回滚事务(恢复到初始状态)
2. 索引:提升查询性能
索引是加速查询的 “目录”,需合理设计:
- 类型:主键索引(自动创建)、唯一索引、普通索引、联合索引。
- 底层结构:InnoDB 默认使用B + 树索引(支持范围查询和排序)。
- 创建与删除:
-- 创建普通索引 create index idx_age on users(age); -- 创建联合索引(遵循最左前缀原则) create index idx_name_age on users(username, age); -- 删除索引 drop index idx_age on users;
- 使用原则:频繁查询的列建索引,频繁更新的列慎建索引;避免索引失效(如使用函数、左模糊查询)。
九、非关系型数据库简介
非关系型数据库(NoSQL)适用于非结构化 / 半结构化数据,主流类型:
- 文档型(MongoDB):以 JSON 格式存储文档,适合内容管理、日志存储。
- 内存型(Redis):数据存于内存,支持键值对、列表、哈希等结构,适合缓存、计数器。
非关系型数据库不遵循 SQL 标准,优势是高并发、易扩展,常与关系型数据库结合使用(如 MySQL 存核心数据,Redis 存缓存)。
总结
本文从关系型数据库基础到 MySQL 实战,涵盖了安装配置、CRUD 操作、设计原则、高级特性等核心知识。数据库学习需 “理论 + 实践” 结合,建议通过实际项目练习表设计、查询优化和性能调优,逐步掌握数据管理的精髓。
后续可深入学习 MySQL 存储引擎原理、主从复制、分库分表等高级主题,为大型系统开发打下基础。
参考资料:
- MySQL 官方文档:https://dev.mysql.com/doc/
- 《MySQL 必知必会》《高性能 MySQL》