写在前面:这是MySQL全面教学系列的第一篇。作为后端开发,数据库是必备技能,而MySQL是国内使用最广泛的关系型数据库。这个系列我会从安装配置讲起,一直讲到性能优化和面试高频考点。建议收藏,持续更新。

文章目录
-
- 一、为什么学MySQL?
-
- [1.1 MySQL的市场地位](#1.1 MySQL的市场地位)
- [1.2 关系型数据库 vs 非关系型数据库](#1.2 关系型数据库 vs 非关系型数据库)
- 二、MySQL安装与配置
-
- [2.1 下载安装(Windows/Mac/Linux)](#2.1 下载安装(Windows/Mac/Linux))
- [2.2 连接MySQL](#2.2 连接MySQL)
- [2.3 第一个SQL命令](#2.3 第一个SQL命令)
- 三、MySQL基础概念
-
- [3.1 数据库、表、字段、记录](#3.1 数据库、表、字段、记录)
- [3.2 SQL语句分类](#3.2 SQL语句分类)
- [3.3 字符集选择:utf8 vs utf8mb4](#3.3 字符集选择:utf8 vs utf8mb4)
- 四、创建第一个数据库和表
-
- [4.1 创建用户管理系统数据库](#4.1 创建用户管理系统数据库)
- [4.2 插入测试数据](#4.2 插入测试数据)
- 五、常用配置优化
-
- [5.1 修改root密码](#5.1 修改root密码)
- [5.2 远程访问配置](#5.2 远程访问配置)
- 六、面试高频考点
-
- 考点1:MySQL的默认端口是多少?
- [考点2:MySQL 5.7和8.0的主要区别?](#考点2:MySQL 5.7和8.0的主要区别?)
- 考点3:为什么要用utf8mb4而不是utf8?
- 考点4:InnoDB和MyISAM的区别?
- 七、总结
- 参考资料
一、为什么学MySQL?
实际场景:你去面试Java/Python后端岗位,10家公司有9家会在面试阶段问MySQL。为什么?因为几乎所有的业务系统都需要持久化存储数据,而MySQL关系型数据库就是业界标配。
1.1 MySQL的市场地位

1.2 关系型数据库 vs 非关系型数据库
关系型数据库(MySQL/Oracle/PostgreSQL)
├── 结构化数据,有固定表结构
├── 支持SQL标准查询语言
├── 支持事务(ACID)
├── 适合复杂查询、数据一致性要求高的场景
└── 示例:电商订单系统、银行交易系统
非关系型数据库(MongoDB/Redis/Elasticsearch)
├── 灵活的数据模型
├── 高性能、高可扩展
├── 不一定支持事务
├── 适合海量数据、高并发读写
└── 示例:缓存、日志、搜索引擎
二、MySQL安装与配置
2.1 下载安装(Windows/Mac/Linux)
Windows安装:
- 官网下载:https://dev.mysql.com/downloads/mysql/
- 选择 Windows (x86, 64-bit), ZIP Archive
- 解压到
C:\mysql-8.0.x - 创建
my.ini配置文件
ini
[mysqld]
basedir=C:/mysql-8.0.x
datadir=C:/mysql-8.0.x/data
port=3306
character-set-server=utf8mb4
default-storage-engine=INNODB
[client]
port=3306
default-character-set=utf8mb4
- 初始化并启动:
bash
# 以管理员身份运行CMD
cd C:\mysql-8.0.x\bin
# 初始化(会生成临时密码)
mysqld --initialize --console
# 安装服务
mysqld --install MySQL80
# 启动服务
net start MySQL80
Mac安装(推荐Homebrew):
bash
# 安装
brew install mysql@8.0
# 启动服务
brew services start mysql
# 安全配置(设置root密码)
mysql_secure_installation
Linux(Ubuntu)安装:
bash
# 更新包索引
sudo apt update
# 安装MySQL
sudo apt install mysql-server
# 启动服务
sudo systemctl start mysql
sudo systemctl enable mysql
# 安全配置
sudo mysql_secure_installation
2.2 连接MySQL
命令行连接:
bash
# 本地连接
mysql -u root -p
# 指定主机和端口
mysql -h localhost -P 3306 -u root -p
# 直接执行SQL文件
mysql -u root -p < script.sql
图形化工具推荐:
| 工具 | 特点 | 推荐度 |
|---|---|---|
| Navicat | 功能全面,付费 | ⭐⭐⭐⭐⭐ |
| DataGrip | JetBrains出品,智能提示强 | ⭐⭐⭐⭐⭐ |
| DBeaver | 开源免费,支持多种数据库 | ⭐⭐⭐⭐ |
| MySQL Workbench | 官方工具,免费 | ⭐⭐⭐ |
| HeidiSQL | 轻量免费,Windows首选 | ⭐⭐⭐⭐ |
经验之谈:日常开发我用DataGrip,与IDEA相同的生态,体感非常好。
2.3 第一个SQL命令
连接成功后,试试这些基础命令:
sql
-- 查看MySQL版本
SELECT VERSION();
-- 查看所有数据库
SHOW DATABASES;
-- 创建数据库
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 使用数据库
USE mydb;
-- 查看当前数据库
SELECT DATABASE();
-- 查看所有表
SHOW TABLES;
三、MySQL基础概念
3.1 数据库、表、字段、记录
数据库(Database)
└── 表(Table)
├── 字段/列(Column):id, name, email...
└── 记录/行(Row):(1, '张三', 'zhangsan@qq.com')
类比Excel:
- 数据库 = 一个Excel文件
- 表 = Excel中的一个Sheet
- 字段 = Sheet的列标题
- 记录 = Sheet中的一行数据
3.2 SQL语句分类
| 分类 | 说明 | 常用语句 |
|---|---|---|
| DDL | 数据定义语言 | CREATE, DROP, ALTER |
| DML | 数据操作语言 | INSERT, UPDATE, DELETE |
| DQL | 数据查询语言 | SELECT |
| DCL | 数据控制语言 | GRANT, REVOKE |
| TCL | 事务控制语言 | COMMIT, ROLLBACK |
3.3 字符集选择:utf8 vs utf8mb4
踩坑提醒 :MySQL早期的utf8其实是阉割版UTF-8,只支持3字节字符,无法存储emoji(😀)和某些生僻汉字。一定要用utf8mb4!
sql
-- 查看当前字符集
SHOW VARIABLES LIKE 'character_set%';
-- 修改数据库字符集
ALTER DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 修改表字符集
ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
四、创建第一个数据库和表
4.1 创建用户管理系统数据库
sql
-- 创建数据库
CREATE DATABASE IF NOT EXISTS user_system
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
-- 使用数据库
USE user_system;
-- 创建用户表
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID',
username VARCHAR(50) NOT NULL UNIQUE COMMENT '用户名',
email VARCHAR(100) NOT NULL UNIQUE COMMENT '邮箱',
phone VARCHAR(20) COMMENT '手机号',
age TINYINT UNSIGNED COMMENT '年龄',
status TINYINT DEFAULT 1 COMMENT '状态:0-禁用,1-启用',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
INDEX idx_email (email),
INDEX idx_phone (phone)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
-- 查看表结构
DESC users;
-- 查看建表语句
SHOW CREATE TABLE users;
4.2 插入测试数据
sql
-- 单条插入
INSERT INTO users (username, email, phone, age)
VALUES ('zhangsan', 'zhangsan@qq.com', '13800138000', 25);
-- 批量插入
INSERT INTO users (username, email, phone, age) VALUES
('lisi', 'lisi@qq.com', '13800138001', 28),
('wangwu', 'wangwu@qq.com', '13800138002', 22),
('zhaoliu', 'zhaoliu@qq.com', '13800138003', 30);
-- 查询数据
SELECT * FROM users;
五、常用配置优化
5.1 修改root密码
sql
-- MySQL 8.0+
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的新密码';
FLUSH PRIVILEGES;
-- 或者创建新用户
CREATE USER 'admin'@'%' IDENTIFIED WITH mysql_native_password BY '密码';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
5.2 远程访问配置
踩坑提醒:生产环境不要开放root远程访问!应该创建专门的账号并限制IP。
sql
-- 创建只允许特定IP访问的账号
CREATE USER 'app_user'@'192.168.1.%' IDENTIFIED BY '密码';
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'app_user'@'192.168.1.%';
FLUSH PRIVILEGES;
六、面试高频考点
考点1:MySQL的默认端口是多少?
答案:3306。如果一台服务器要运行多个MySQL实例,需要修改端口(如3307、3308)。
考点2:MySQL 5.7和8.0的主要区别?
答案:
- 8.0默认使用
caching_sha2_password认证插件(5.7是mysql_native_password) - 8.0支持窗口函数、CTE(公用表表达式)
- 8.0性能提升,尤其是高并发场景
- 8.0移除了查询缓存(Query Cache)
考点3:为什么要用utf8mb4而不是utf8?
答案 :utf8在MySQL中最多支持3字节UTF-8编码,无法存储4字节的emoji和某些汉字。utf8mb4支持完整的4字节UTF-8。
考点4:InnoDB和MyISAM的区别?
答案:
- InnoDB:支持事务、行级锁、外键,是MySQL 5.5+的默认存储引擎
- MyISAM:不支持事务、表级锁,查询速度快,适合读多写少的场景(已逐渐被淘汰)
七、总结
今天我们学习了:
- ✅ MySQL的市场地位和适用场景
- ✅ MySQL在Windows/Mac/Linux的安装方法
- ✅ 连接MySQL的多种方式
- ✅ 数据库、表、字段、记录的基本概念
- ✅ SQL语句的分类(DDL/DML/DQL/DCL/TCL)
- ✅ 创建数据库和表的完整流程
- ✅ utf8mb4字符集的重要性
重点记忆:
- 一定要用utf8mb4,不要用utf8
- 生产环境不要开放root远程访问
- InnoDB是默认且推荐的存储引擎
- 学会使用图形化工具提高效率
下一步预告 :
Day2我们将学习MySQL的数据类型,包括数值类型、字符串类型、日期类型,以及选择数据类型的最佳实践。
参考资料
互动话题:你在安装MySQL的时候遇到过什么问题?是环境变量配置、字符集设置,还是权限问题?欢迎在评论区分享你的踩坑经历!
如果这篇文章对你有帮助,欢迎点赞、收藏 !这是【MySQL全面教学】系列的第一篇,关注我看完整套教程 👇
本文为【MySQL全面教学】系列第1篇,持续更新中...