从零起步学习MySQL 第一章:初识MySQL及深入理解内部数据类型

引言

从今天开始,我们正式启动MySQL的系统性学习之旅!本专栏将完全从零起步,循序渐进地带大家吃透MySQL的整个知识库------从最基础的概念、操作,到进阶的优化、调优,再到生产环境的实战技巧,全程干货无冗余。无论你是刚入门的后端新手,还是想巩固基础的开发从业者,都能从中有所收获。学习过程中,大家有任何疑问、困惑,或者不同的见解,都可以在评论区交流探讨,我们一起进步、一起成长,感谢大家的支持!

一、MySQL 是什么?------ 后端开发的"数据管家"

在后端开发的世界里,无论你是开发简单的注册登录接口、复杂的商品管理系统,还是核心的订单交易系统,都离不开一个核心组件------数据库。而在众多数据库中,MySQL 凭借其开源免费、高效稳定、兼容性强的特点,成为了后端开发者的首选,更是Java后端开发中最常用的关系型数据库,没有之一。

✅ 核心定义

MySQL 是一种 关系型数据库管理系统(RDBMS),它基于关系模型设计,使用 SQL(结构化查询语言)作为数据的存取和管理工具。简单来说,MySQL 就像一个"智能文件柜",它把杂乱无章的数据,按照固定的规则(表格)整理存放,并且表与表之间通过特定的关系关联起来,方便我们快速查询、修改和管理数据。

补充:关系型数据库的核心是"关系",也就是表与表之间的关联,这也是它和非关系型数据库(NoSQL)最本质的区别之一。

✅ 核心特点(新手必记)

  • 结构化存储:数据以表格(Table)形式保存,每行对应一条数据记录,每列对应一个数据字段,结构清晰、直观,便于理解和维护。比如用户信息、商品信息,都可以对应一张独立的表,字段固定且规范。

  • 支持事务(Transaction):这是MySQL保障数据安全的核心特性,遵循ACID原则(原子性、一致性、隔离性、持久性),可以避免多用户并发操作时出现数据错乱、丢失等问题。比如用户下单支付,扣减库存和增加订单这两个操作,要么同时成功,要么同时失败,不会出现"库存扣了但订单没生成"的情况。

  • SQL语句操作灵活:提供了统一的SQL结构化查询语言,语法简洁、功能强大,能够高效完成数据的查询、插入、删除、更新等操作,无论是简单的单表查询,还是复杂的多表关联查询,都能轻松实现。

  • 高兼容性:几乎兼容所有主流编程语言和开发框架,尤其是Java + Spring Boot组合,提供了完善的连接方式(如JDBC、MyBatis),开发中无需额外适配,上手成本极低。

  • 开源免费:MySQL社区版完全开源,可免费下载、使用和二次开发,无需支付任何版权费用,无论是个人学习、小型项目,还是大型企业级应用,都能满足需求,这也是它普及度极高的重要原因。

二、MySQL 的基本组成结构------看懂"数据的存放规则"

想要学好MySQL,首先要理清它的基本组成结构。MySQL的核心是"表",所有数据都围绕表来存储和管理,我们可以把它类比成"文件夹和文件"的关系,层层嵌套、结构清晰。

概念 说明 示例
数据库(Database) 存放表的集合,相当于一个"文件夹",用于分类管理不同业务的表 shop_db(电商项目的数据库,存放商品、订单、用户相关的表)
表(Table) 存放数据的结构化集合,相当于"文件夹里的文件",每个表对应一个业务实体 user(用户表)、order(订单表)、goods(商品表)
行(Row) 表中的一条完整的数据记录,相当于"文件里的一行内容",对应一个实体实例 用户A的信息(id:1、username:zhangsan、password:123456)
列(Column) 表中的某个字段,用于描述实体的一个属性,相当于"文件里的一列标题" username(用户名)、password(密码)、email(邮箱)
主键(Primary Key) 唯一标识某条记录的字段,不能重复、不能为null,相当于"每个人的身份证号" user表中的user_id(自增ID)
外键(Foreign Key) 建立表与表之间关系的字段,关联两个表的主键,相当于"两个文件夹之间的关联标签" order表中的user_id(关联user表的user_id,标识该订单属于哪个用户)

📌 实战举例:创建一张简单的用户表

下面这段SQL语句,就能创建一张基础的用户表,大家可以先熟悉一下语法(后续章节会详细讲解每一部分的含义):

sql 复制代码
CREATE TABLE user (
  id INT PRIMARY KEY AUTO_INCREMENT,  -- 主键,自增ID(唯一标识用户)
  username VARCHAR(50) NOT NULL,      -- 用户名,非空(必填)
  password VARCHAR(100) NOT NULL,     -- 密码,非空(必填,建议加密存储)
  email VARCHAR(100) UNIQUE,          -- 邮箱,唯一(不允许重复)
  create_time DATETIME DEFAULT NOW()  -- 创建时间,默认当前时间(扩展字段)
);

这张表就对应了"用户"这个实体,每一条记录都是一个用户的完整信息,后续我们可以通过SQL语句,向这张表中插入、查询、修改用户数据。

三、MySQL vs NoSQL 的区别------选对数据库,少走弯路

随着互联网的快速发展,数据量越来越大,数据类型也越来越复杂,除了MySQL这种关系型数据库,还出现了很多NoSQL(非关系型)数据库,比如Redis、MongoDB、Cassandra等。很多新手会困惑:什么时候用MySQL?什么时候用NoSQL?其实二者没有绝对的优劣,只有"适合与否",我们通过对比,就能快速分清它们的适用场景。

对比项 MySQL(关系型数据库) NoSQL(非关系型数据库)
数据结构 表格形式(结构化数据),字段固定、格式规范 文档、键值、列族或图(非结构化/半结构化数据),格式灵活
查询语言 SQL(结构化查询语言),统一标准,学习成本低 无统一标准,各自有专属API,语法差异较大
事务支持 强事务支持,严格遵循ACID原则,数据安全性高 大多弱事务支持,或仅支持最终一致性,适合对数据一致性要求不高的场景
扩展方式 主要是垂直扩展(增加单台机器的CPU、内存、硬盘),扩展成本较高 主要是水平扩展(增加机器数量),扩展灵活、成本较低,适合大数据量场景
典型代表 MySQL、PostgreSQL、Oracle MongoDB、Redis、Neo4j、Cassandra
使用场景 用户系统、订单系统、财务系统等,需要结构化数据、强事务的场景 日志存储、缓存、社交关系、大数据分析等,需要灵活存储、高并发的场景

🌟 实际场景举例:快速选对数据库

结合实际业务场景,我们可以快速判断该用哪种数据库,新手直接套用即可:

  • 用户注册登录(字段固定:用户名、密码、邮箱,需要强事务,避免注册失败但密码被存储)------ ✅ MySQL

  • 缓存验证码、Session(需要高速读写,无需持久化存储,支持过期时间)------ ✅ Redis

  • 存储不定结构的JSON文档(如商品详情、用户个性化配置,字段不固定)------ ✅ MongoDB

  • 好友推荐、社交关系链(需要存储用户之间的关联关系,属于图结构)------ ✅ Neo4j

  • 电商平台的订单交易(需要强事务,确保下单、扣库存、支付联动成功)------ ✅ MySQL

  • 系统日志存储(数据量大、格式灵活,无需事务,需要快速写入)------ ✅ MongoDB/Cassandra

👉 总结一句话

MySQL 管"结构化数据",主打一个"规范、安全、可靠";NoSQL 管"灵活数据",主打一个"高效、灵活、可扩展"。在实际项目中,很少单独使用一种数据库,通常是 MySQL + Redis + MongoDB 混合使用,各司其职、优势互补(比如用MySQL存核心业务数据,Redis做缓存提升速度,MongoDB存非结构化数据)。

四、MySQL 的内部数据模型------理解"数据的关联逻辑"

MySQL 属于 关系模型(Relational Model),它的核心思想是通过"实体-关系(ER)"的方式管理数据,简单来说,就是把现实中的"事物"(实体)和"事物之间的联系"(关系),转化为数据库中的表和表之间的关联,让数据之间的逻辑更清晰。

1️⃣ 实体与表(Entity & Table)

现实中的每一个"事物",都可以看作一个"实体",而每个实体在MySQL中,就对应一张表。实体的"属性"(比如用户的姓名、年龄、邮箱),就对应表中的"列";实体的"实例"(比如具体的某个用户),就对应表中的"行"。

举例:"用户"是一个实体,对应user表;"订单"是一个实体,对应order表;"商品"是一个实体,对应goods表。用户的"用户名""密码"是属性,对应user表的username、password列;具体的用户"张三",就是user表中的一行记录。

2️⃣ 主键与外键------表与表的"纽带"

  • 主键(Primary Key,PK) :唯一标识表中的一条记录,相当于实体的"身份证号",具有两个核心特点:不能重复、不能为null。一张表只能有一个主键,可以是单个字段(如id),也可以是多个字段组合(复合主键,较少用)。

  • 外键(Foreign Key,FK):用来建立不同表之间的关联关系,它的值必须对应另一张表的主键值。通过外键,我们可以实现表与表之间的联动查询、联动操作,避免数据冗余和数据不一致。

举例:用户表(user)的主键是id,订单表(order)的外键是user_id,user_id的值必须对应user表中的id值。这样一来,我们就能通过user_id,找到每个订单对应的用户信息,实现"订单-用户"的关联查询。

3️⃣ 常见的关系类型(必懂)

表与表之间的关系,主要分为三种,结合实例理解,新手也能轻松记住:

关系类型 说明 示例
一对一(1:1) 两个表的记录一一对应,一个表的一条记录,只能对应另一个表的一条记录 用户与身份证信息(一个用户只有一张身份证,一张身份证只属于一个用户)
一对多(1:N) 一个表的一条记录,可以对应另一个表的多条记录;反之,另一个表的多条记录,只能对应这个表的一条记录(最常用) 用户与订单(一个用户可以下多个订单,一个订单只能属于一个用户)
多对多(N:M) 两个表的记录相互对应,一个表的一条记录,可以对应另一个表的多条记录;反之亦然 学生与课程(一个学生可以选多门课程,一门课程可以被多个学生选择,通常需要一张中间表关联)

五、MySQL 内部的存储引擎------数据的"存储方式"

MySQL 的存储引擎,相当于"数据的存储方式和管理策略",它决定了数据如何存储、如何读取、是否支持事务、是否支持锁等核心功能。MySQL 支持多种存储引擎,我们可以根据业务需求,为不同的表选择不同的存储引擎(默认是InnoDB)。

存储引擎 核心特点 适用场景
InnoDB 支持事务、行级锁、崩溃恢复、外键,数据安全性高,读写性能均衡(MySQL 5.5及以上默认引擎) 默认引擎,适合大部分业务系统(用户、订单、财务等需要事务的场景)
MyISAM 不支持事务、不支持外键,支持表级锁,读取速度快,占用资源少 日志存储、统计报表、只读或读写频率极低的业务(如网站访问量统计)
Memory 数据存放在内存中,读写速度极快,重启MySQL后数据丢失,不支持事务 临时表、缓存数据(如临时计算结果、短期缓存)
CSV 以CSV文件形式存储数据,可直接用Excel打开,不支持索引、事务 数据交换、导入导出场景(如与其他系统交换数据,快速导入批量数据)

重点提示:目前主流的项目(尤其是Java后端项目),基本都使用 InnoDB 存储引擎,因为它支持事务和行级锁,能满足大部分业务的安全性和性能需求。MyISAM 由于不支持事务,已逐渐被淘汰,仅在一些特殊场景下使用。

六、总结与思维导图(文字版)------ 梳理重点,加深记忆

本章我们从零开始,认识了MySQL的核心概念、基本结构、与NoSQL的区别、内部数据模型和存储引擎,为后续的学习打下了坚实的基础。下面用文字版思维导图,梳理本章重点,方便大家回顾记忆:

MySQL数据库学习总结(第一章)

  • 一、MySQL简介

    • 属于关系型数据库管理系统(RDBMS)

    • 使用SQL语言操作数据

    • 数据以表格形式存储,表与表之间有关联

    • 核心特点:结构化、事务支持、高兼容、开源免费

  • 二、MySQL vs NoSQL

    • SQL:结构化、强事务、垂直扩展、适合核心业务

    • NoSQL:非结构化、弱事务、水平扩展、适合灵活场景

    • 实际项目:MySQL + Redis + MongoDB 混合使用

  • 三、内部数据模型

    • 基于实体-关系(ER)模型

    • 主键(唯一标识)、外键(表间关联)

    • 三种关系类型:一对一、一对多、多对多

  • 四、存储引擎

    • InnoDB:默认引擎,支持事务、行级锁(主流首选)

    • MyISAM:无事务,读取快(特殊场景使用)

    • Memory:内存存储,速度快(临时数据)

    • CSV:文件存储,适合数据交换

一键获取完整项目代码

七、结语

MySQL 是 Java 后端开发的"地基",也是所有后端开发者必须掌握的核心技能之一。无论是简单的用户登录系统,还是复杂的分布式电商平台,数据的持久化、查询和优化,都离不开MySQL的支撑。

本章我们完成了MySQL的"入门启蒙",后续章节,我们将逐步深入,学习MySQL的安装配置、SQL基础语法、数据查询、事务管理、索引优化等核心内容,一步步从"新手"成长为"MySQL高手"。

学习过程中,大家一定要多动手实践------看懂SQL语句不难,难的是熟练运用,建议大家跟着教程,亲手创建数据库、创建表、操作数据,只有多练,才能真正掌握。有任何疑问,评论区随时交流~
🌟
🤔

相关推荐
有想法的py工程师2 小时前
PostgreSQL 触发器性能评估实战(pg_stat_user_functions)
数据库·postgresql
雨后的天空@2 小时前
Mac 安装多个版本的mysql
mysql
御坂10101号2 小时前
「2>&1」是什么意思?半个世纪的 Unix 谜题
java·数据库·bash·unix
韩立学长2 小时前
基于Springboot校园志愿者服务平台77pz7812(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·后端
代码雕刻家3 小时前
MySQL和SQL Server注意事项
数据库·mysql
代码探秘者3 小时前
【Redis】分布式锁深度解析:实现、可重入、主从一致性与强一致方案
java·数据库·redis·分布式·缓存·面试
IvorySQL3 小时前
IvorySQL 5.3 正式发布:基于 PG 18.3 内核,多特性升级+全场景适配
数据库·postgresql·开源
冰糖拌面3 小时前
mysql 与 pg 的网卡监听参数
数据库·mysql·postgresql
DBA小马哥3 小时前
智能电网调度系统国产化:为什么总卡在数据库替换这一步?
数据库