从零起步学习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语句不难,难的是熟练运用,建议大家跟着教程,亲手创建数据库、创建表、操作数据,只有多练,才能真正掌握。有任何疑问,评论区随时交流~
🌟
🤔

相关推荐
2301_813599557 分钟前
Go语言怎么做秒杀系统_Go语言秒杀系统实战教程【实用】
jvm·数据库·python
NCIN EXPE5 小时前
redis 使用
数据库·redis·缓存
MongoDB 数据平台5 小时前
为编码代理引入 MongoDB 代理技能和插件
数据库·mongodb
极客on之路5 小时前
mysql explain type 各个字段解释
数据库·mysql
代码雕刻家5 小时前
MySQL与SQL Server的基本指令
数据库·mysql·sqlserver
lThE ANDE5 小时前
开启mysql的binlog日志
数据库·mysql
yejqvow125 小时前
CSS如何控制placeholder文字的颜色_使用--placeholder伪元素
jvm·数据库·python
oLLI PILO5 小时前
nacos2.3.0 接入pgsql或其他数据库
数据库
m0_743623925 小时前
HTML怎么创建多语言切换器_HTML语言选择下拉结构【指南】
jvm·数据库·python