当前位置: 首页 > news >正文

MySQL 超详细入门指南:从数据库基础到面试常问

一、什么是数据库?

1.1 概念

数据库(Database,简称 DB)是长期存放在计算机内、有组织、可共享的大量数据的集合,是一个数据"仓库"。

1.2 作用

存放和管理数据。

1.3 分类

类型说明代表
关系型数据库使用表格存储数据,数据之间有关联关系MySQL、Oracle、SQL Server
NoSQL 数据库非关系型数据库,适合大数据、高并发场景MongoDB、Redis

二、为什么选择 MySQL?

MySQL 是目前最流行的开源关系型数据库之一,具有以下特点:

  • 操作便捷:SQL 语法简单易学
  • 小巧、功能齐全:体积小但功能强大
  • 免费开源:社区版完全免费
  • 跨平台:可运行在 Windows 或 Linux 系统

三、数据库结构概览

概念说明
数据库(Database)以文件形式存放在磁盘上,对应一个或多个物理文件
数据表(Table)由一组数据记录组成,数据库中的数据以表为单位进行组织
字段(Field)也称"域",表中的每一列称为一个字段
记录(Record)表中的每一行称为一个记录,由若干字段组成
索引(Index)含有关键字段的值和指向实际记录位置的指针,可提高访问效率
SQL 语句结构化查询语言,用于操作数据库

四、SQL 语句分类

分类全称作用常用命令
DDL数据定义语言(Data Definition Language)定义和管理数据对象,如数据库、数据表CREATEDROPALTER
DML数据操作语言(Data Manipulation Language)操作数据库对象中包含的数据INSERTUPDATEDELETE
DQL数据查询语言(Data Query Language)查询数据库数据SELECT
DCL数据控制语言(Data Control Language)管理权限及数据更改GRANTCOMMITROLLBACK

五、DDL 操作数据库

5.1 创建数据库

CREATEDATABASE[IFNOTEXISTS]dbname;
  • IF NOT EXISTS:可选,如果数据库不存在则创建
  • dbname:数据库名称

5.2 删除数据库

DROPDATABASE[IFEXISTS]dbname;

5.3 查看所有数据库

SHOWDATABASES;

⚠️ 注意:不要省略末尾的S

5.4 选择数据库

USEdbname;

六、DDL 创建数据表

6.1 基本语法

CREATETABLE表名(字段名1类型[属性],字段名2类型[属性],...字段名n 类型[属性]-- 最后一个字段不带逗号);

6.2 示例

CREATETABLEstudent(stu_nameVARCHAR(10),stu_ageTINYINT,stu_birthdayDATETIME,stu_idCHAR(18),stu_scoreDECIMAL(4,1));

七、数据类型详解

7.1 字符串类型

类型说明取值范围存储需求
CHAR(M)固定长度字符串,检索快但费空间0 ≤ M ≤ 255M 字符
VARCHAR(M)可变长度字符串0 ≤ M ≤ 65535变长度
TINYTEXT微型文本串16777215 长度 + 3 字节tinytext
TEXT文本串(约 4G 大小)4294967295 长度 + 4 字节text

💡CHAR vs VARCHAR 选择建议

  • CHAR:适用于长度固定、查询频繁的场景(如手机号、身份证号)
  • VARCHAR:适用于长度不固定、节省空间的场景(如姓名、地址)

7.2 数值类型

类型说明取值范围存储需求
TINYINT非常小的数据有符号:-2⁷ ~ 2⁷-1;无符号:0 ~ 2⁸-11 字节
SMALLINT较小的数据有符号:-2¹⁵ ~ 2¹⁵-1;无符号:0 ~ 2¹⁶-12 字节
MEDIUMINT中等大小的数据有符号:-2²³ ~ 2²³-1;无符号:0 ~ 2²⁴-13 字节
INT标准整数有符号:-2³¹ ~ 2³¹-1;无符号:0 ~ 2³²-14 字节
BIGINT较大的整数有符号:-2⁶³ ~ 2⁶³-1;无符号:0 ~ 2⁶⁴-18 字节
FLOAT单精度浮点数±1.1754351e-384 字节
DOUBLE双精度浮点数±2.2250738585072014e-3088 字节
DECIMAL(M,D)精确小数(适用于金额)由 M 和 D 决定M 个字节

⚠️DECIMAL 使用注意

  • M指字节长度,D指小数位数
  • 例如DECIMAL(4,1)最多存储999.9
  • 适用于需要精确计算的场景(如金额)

7.3 NULL 类型

  • 理解为"没有值"或"未知值"
  • 不要用 NULL 进行算术运算,结果仍为 NULL
  • MySQL 中,0 或 NULL 都意味着为假,1 为真

八、字段注释

给字段增加注释,方便后续维护:

CREATETABLEstudent(stu_idINT(4)COMMENT'ID',stu_nameVARCHAR(10)COMMENT'姓名',stu_ageINT(2)COMMENT'年龄',stu_sexCHAR(2)COMMENT'性别');

九、查看表结构

方式一:desc 命令

DESCstudent;-- 或DESCRIBEstudent;

方式二:查看建表语句

SHOWCREATETABLEstudent;

十、修改和删除表结构

10.1 修改表名

ALTERTABLE旧表名RENAMEAS新表名;-- 示例ALTERTABLEstudentRENAMEASxuesheng;

10.2 添加字段

ALTERTABLE表名ADD字段名 类型[属性];-- 示例ALTERTABLExueshengADDstu_qqVARCHAR(20)COMMENT'这是学生的QQ号';

10.3 删除字段(⚠️ 危险操作)

ALTERTABLE表名DROP字段名;-- 示例ALTERTABLExueshengDROPstu_age;

10.4 修改字段

方式一:MODIFY(只改类型和属性)
ALTERTABLE表名MODIFY字段名 新类型[新属性];-- 示例:将 stu_name 长度改为 100ALTERTABLExueshengMODIFYstu_nameVARCHAR(100);
方式二:CHANGE(可改字段名、类型和属性)
ALTERTABLE表名 CHANGE 旧字段名 新字段名 新类型[新属性];-- 示例:将 stu_qq 改名为 qqALTERTABLExuesheng CHANGE stu_qq qqVARCHAR(20)COMMENT'这是学生的QQ号';

10.5 删除表(⚠️ 危险操作)

DROPTABLE[IFEXISTS]表名;

十一、存储引擎

11.1 InnoDB(MySQL 5.5+ 默认)

特点:

  • ✅ 支持事务处理(ACID)
  • ✅ 支持外键约束
  • ✅ 支持行级锁,适合高并发
  • ✅ 崩溃后可安全恢复

适用场景:需要频繁增删改查、高并发、事务处理的场景

文件结构:

  • 表名.ibd:存储数据和索引(MySQL 8.0 合并了表结构)

11.2 MyISAM(MySQL 5.5 之前默认)

特点:

  • ✅ 访问速度快
  • ✅ 支持全文索引、压缩、空间函数
  • ❌ 不支持事务
  • ❌ 不支持外键
  • ❌ 不支持行级锁(表级锁)
  • ❌ 崩溃后无法安全恢复

适用场景:只读应用或以读为主的业务

文件结构:

  • 表名.frm:存储表结构
  • 表名.MYD:存储数据(MYData)
  • 表名.MYI:存储索引(MYIndex)

11.3 InnoDB vs MyISAM 对比

对比项MyISAMInnoDB
外键❌ 不支持✅ 支持
事务❌ 不支持✅ 支持
锁机制表锁行锁
缓存只缓存索引缓存索引 + 真实数据
默认使用❌ 否(5.5 之前是)✅ 是(5.5+)
关注点性能:节省资源、消耗少事务:并发写、更大资源

十二、数据库三大范式

12.1 什么是范式?

为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循的规则。

12.2 第一范式(1NF):确保每列保持原子性

  • 每一列属性都是不可再分的属性值
  • 两列属性相近或相似时,尽量合并

反例:地址字段存"北京市海淀区",应拆分为省、市、区三列。

12.3 第二范式(2NF):确保每列都和主键相关

  • 在满足 1NF 的基础上建立
  • 每个实例或行必须可以被唯一区分
  • 需要添加主键作为唯一标识

12.4 第三范式(3NF):确保每列都和主键直接相关

  • 数据不能存在传递关系
  • 即每个属性都跟主键有直接关系,而不是间接关系

反例:

学生表(学号,姓名,年龄,性别,所在院校,院校地址,院校电话)

存在传递关系:学号 → 所在院校 → (院校地址,院校电话)

应拆分为:

  • 学生表(学号,姓名,年龄,性别,所在院校)
  • 院校表(所在院校,院校地址,院校电话)

💡注意:三大范式是一般设计数据库的基本理念,但需求 > 性能 > 表结构,不能一味追求范式。


十三、约束

13.1 什么是约束?

约束是表中数据的限制条件,目的是保证表中的记录完整和有效。

13.2 约束种类

约束说明
NOT NULL非空约束
UNIQUE唯一性约束
PRIMARY KEY主键约束
FOREIGN KEY外键约束
CHECK检查约束(MySQL 不支持,Oracle 支持)

13.3 约束示例

非空约束
CREATETABLEtb1(usernameVARCHAR(10)NOTNULL,-- 非空约束userageINTDEFAULTNULL);-- 带默认值的非空约束CREATETABLEtb2(usernameVARCHAR(10)NOTNULLDEFAULT'无名',userageINT);
唯一约束
-- 行级约束(单列唯一)CREATETABLEtb3(usernameVARCHAR(10)UNIQUE,userageINT);-- 联合唯一约束(多列组合唯一)CREATETABLEtb4(usernameVARCHAR(10),userageINT,UNIQUE(username,userage));-- 给约束起名字CREATETABLEtb5(usernameVARCHAR(10),userageINT,CONSTRAINTname_age_uniqueUNIQUE(username,userage));

💡注意:唯一约束可以为 NULL,并且可以有多个 NULL(因为 NULL 是一个类型)。

主键约束
-- 单列主键CREATETABLEtb6(usernameVARCHAR(10)PRIMARYKEY,userageINT);-- 联合主键CREATETABLEtb7(usernameVARCHAR(10),userageINT,PRIMARYKEY(username,userage));-- 自增主键(推荐)CREATETABLEtb8(tidINTPRIMARYKEYAUTO_INCREMENT,-- 主键自增,不会回补usernameVARCHAR(10),userageINT);

💡主键特点:每张表必须有且只有一个主键;主键值唯一且不能为 NULL。

外键约束
-- 父表(主表)CREATETABLEa(aidINTPRIMARYKEYAUTO_INCREMENT,anameVARCHAR(10));-- 从表CREATETABLEb(bidINTPRIMARYKEYAUTO_INCREMENT,bnameVARCHAR(10),aidINT,FOREIGNKEY(aid)REFERENCESa(aid));

💡外键特点

  • 外键值可以重复
  • 外键值可以为 NULL
  • 外键值必须是父表中存在的值
  • 父表的关联字段必须具有唯一性
  • 一个表中可以有多个外键,但只能有一个主键

13.4 删除约束

-- 删除 NOT NULL 约束ALTERTABLE表名MODIFY列名 类型;-- 删除 UNIQUE 约束ALTERTABLE表名DROPINDEX唯一约束名;-- 删除 PRIMARY KEY 约束ALTERTABLE表名DROPPRIMARYKEY;-- 删除 FOREIGN KEY 约束ALTERTABLE表名DROPFOREIGNKEY外键名;

十四、面试常问

Q1:CHAR() 和 VARCHAR() 的区别?

答:

  1. CHAR(M):固定长度字符串;VARCHAR(M):可变长度字符串
  2. 超过最大长度谁都存不下
  3. VARCHAR不浪费空间但效率低,适用于姓名等变长数据;CHAR浪费空间但效率高,适用于手机号、身份证号等定长数据

Q2:InnoDB 与 MyISAM 的区别?

答:

  • InnoDB:支持事务、外键、行级锁;擅长增删改查,适用于高并发和事务处理场景
  • MyISAM:不支持事务、外键、行级锁;擅长读取,崩溃后无法恢复;优点是存取快、资源消耗少,适用于查询密集型场景

Q3:INT(1) 与 INT(11) 的区别?

答:区别仅在于显示宽度

  • INT(1)中"1"表示显示宽度为 1 位
  • INT(11)中"11"表示显示宽度为 11 位
  • 但它们的存储范围和存储空间完全相同(4 字节,-2147483648 ~ 2147483647)
  • 显示宽度只影响显示效果,不影响存储内容

Q4:三大范式是什么?

答:

  • 第一范式:确保每列保持原子性
  • 第二范式:确保每列都和主键相关
  • 第三范式:确保每列都和主键直接相关,而不是间接相关

Q5:外键约束和外键关系是一回事吗?

答:不是。

  • 外键关系:两个表通过外键建立的关联
  • 外键约束:保障外键关系完整性、一致性的规则(如确保外键值在父表的主键或唯一键中存在)

Q6:DELETE / TRUNCATE / DROP 的区别?

答:

命令作用是否可回滚速度
DELETE删除表中数据,保留表结构✅ 可回滚
TRUNCATE清空表中所有数据,保留表结构❌ 不可回滚
DROP删除整个表(结构和数据)❌ 不可回滚最快

只想删除数据用DELETETRUNCATE;彻底删除表用DROP


十五、总结

本文从数据库基础概念出发,系统梳理了 MySQL 的核心知识点:

  1. ✅ 数据库基本概念与 SQL 分类
  2. ✅ DDL 操作(数据库和表的增删改查)
  3. ✅ 常用数据类型及选择建议
  4. ✅ 存储引擎对比(InnoDB vs MyISAM)
  5. ✅ 三大范式与数据库设计
  6. ✅ 约束的创建与删除
  7. ✅ 面试高频问题

希望这篇文章能帮助你快速入门 MySQL,欢迎在评论区交流讨论!


如果对你有帮助,欢迎点赞 👍 + 收藏 ⭐ + 关注 🔖,持续分享更多技术干货!

http://www.jsqmd.com/news/705812/

相关文章:

  • 2026年Q2宝鸡高性价比装修公司排行实测盘点 - 优质品牌商家
  • 强化学习中针对重点的策略优化方法:AI智能体重点强化教程(2026工业级实践指南)
  • 2026年4月重庆HDPE光面土工膜采购决策指南:深度解析诚信厂商的核心竞争力 - 2026年企业推荐榜
  • 摩尔线程发布一季报:营收7.38亿元,已有45万开发者
  • 【央行金科局内部通报引用】:MCP 2026配置偏差导致审计否决率飙升42%——你的配置还停留在2023版吗?
  • Python非参数统计检验实战:小样本与分布未知场景
  • 告别“重注册轻运营”:产业IP资产成熟度认证助力协会管好集体商标
  • 2026年4月河南太湖石微型盆景选购指南:高评价厂家深度解析 - 2026年企业推荐榜
  • 仅限首批MCP认证专家获取:MCP 2026沙箱隔离调试套件(含strace-enhanced、sandbox-tracer、cgroup-audit CLI),限时开放下载
  • 专知智库发布《产业IP资产成熟度认证白皮书》 首创三维生态模型,填补产业集群品牌量化评价空白
  • 开源AI应用发布平台AppAgent:自动化ASO与商店管理实践
  • MCP 2026量子接口协议兼容性风暴:12家主流QPU厂商实测数据曝光,谁已达标?
  • 2026年保定名酒回收市场指南:如何选择专业可靠的变现渠道 - 2026年企业推荐榜
  • 2026年4月,昆明家长如何为孩子挑选顶尖的军事夏令营? - 2026年企业推荐榜
  • 基于AgentChat的智能对话系统:从RAG原理到生产部署全解析
  • Python3 模块精讲|openpyxl 万字实战:全自动读写 Excel,办公效率直接起飞
  • 20世纪80年代Commodore 64游戏音乐源文件公开,可自由修改但需注明原作者
  • 2026年中国战略咨询机构综合实力TOP 20
  • 开源多媒体工具箱BitFun:本地化自动化处理图片视频音频
  • 深度解析Docker 24.0+新特性:rootless mode + seccomp-bpf v2如何重构AI沙箱安全基线
  • AI 时代的“守门人”:联邦学习与隐私计算,留学生弯道超车的核心密码
  • HTML(5) 代码规范
  • 5分钟在Windows 10上畅玩安卓应用:WSA反向移植完全指南
  • 【MCP 2026农业设备数据对接终极指南】:覆盖ISO 11783、CANopen与TSN时间敏感网络的3层协议适配实战
  • KV缓存技术:大语言模型推理加速的核心机制
  • Android研发主任工程师在汽车行业的云端系统开发实践
  • 2025届必备的AI学术助手横评
  • 定义者战略:企业家的必然选择不是要不要做定义者,而是你已经在为“不被定义”支付代价
  • LeetCode热题100-杨辉三角
  • PyTorch 2.8环境配置全攻略:JDK 1.8与深度学习Java接口搭建