【数据库】MySQL 详细安装与基础使用教程(8版本下载及安装)
前言
适用于 零基础新生,从下载安装到创建数据库、表的完整步骤。
第一部分:下载与安装 MySQL
1. 下载 MySQL
-
最新版下载
- 访问 https://www.mysql.com/downloads/
- 点击
Download
学习是免费的,商用需要付费,进入下载界面,下载对应版本就行了。
-
历史版本下载
历史版本更稳定,我这里推荐下载 8.0+ 版本,本文也以8版本为示例,怎么下载历史版本呢,在开发区:
https://dev.mysql.com/downloads/
然后:
选择版本,和操作系统,下载完整包:
2. 安装 MySQL(Windows 示例)
安装过程,不要升级,不然就不是8版本了:
支持sql命令行的话,需要把shell也安装上:
设置 Root 密码,弱密码也可以过(测试用简单点方便,正式环境绝对不要这样用,如 123456
)。
勾选 “Start the MySQL Server at System Startup”(开机自启)。
安装过程出现问题,可以查看log中的安装信息。
完成安装,勾选 “Launch MySQL Shell” 测试连接。
3. 验证安装
- 打开 MySQL Command Line Client
- 输入root 密码
- 输入之前设置的 root 密码,看到
mysql>
提示符即成功。
第二部分:数据库与表操作
1. 创建数据库
-- 查看所有数据库
SHOW DATABASES;-- 创建新数据库(例如 `student_db`)
CREATE DATABASE student_db;-- 使用数据库
USE student_db;
2. 创建表
-- 创建学生表(包含 id, 姓名, 年龄)
CREATE TABLE students (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50) NOT NULL,age INT,email VARCHAR(100)
);-- 查看当前数据库的表
SHOW TABLES;-- 查看表结构
DESCRIBE students;
3. 插入数据
-- 插入单条数据
INSERT INTO students (name, age, email)
VALUES ('张三', 20, 'zhangsan@example.com');-- 插入多条数据
INSERT INTO students (name, age, email)
VALUES ('李四', 22, 'lisi@example.com'),('王五', 21, 'wangwu@example.com');
4. 查询数据
-- 查询所有数据
SELECT * FROM students;-- 条件查询(年龄大于20的学生)
SELECT * FROM students WHERE age > 20;-- 排序查询(按年龄降序)
SELECT * FROM students ORDER BY age DESC;
5. 更新与删除数据
-- 更新数据(将李四的年龄改为23)
UPDATE students SET age = 23 WHERE name = '李四';-- 删除数据(删除王五的记录)
DELETE FROM students WHERE name = '王五';-- 清空表(谨慎使用!)
TRUNCATE TABLE students;
6. 备份与恢复数据库
备份(导出)
# 在终端执行(非 MySQL 命令行)
mysqldump -u root -p student_db > student_db_backup.sql
恢复(导入)
mysql -u root -p student_db < student_db_backup.sql
第三部分:图形化工具推荐(可选)
-
MySQL Workbench
- 官方工具,支持可视化操作数据库。
- 下载地址:https://dev.mysql.com/downloads/workbench/
-
DBeaver(免费通用数据库工具)
- 下载地址:DBeaver Community | Free Universal Database Tool
常见问题解决
-
忘记 root 密码
- 重置密码步骤:
# 停止 MySQL 服务 sudo systemctl stop mysql# 启动无密码模式 sudo mysqld_safe --skip-grant-tables &# 登录并修改密码 mysql -u root FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
- 重置密码步骤:
-
连接被拒绝(Access Denied)
- 检查是否输入正确的用户名和密码。
- 确保 MySQL 服务已启动:
# Windows net start mysql# Linux/macOS sudo systemctl start mysql
总结
- 安装:下载官方安装包,设置 root 密码。
- 操作:
- 创建数据库:
CREATE DATABASE
- 创建表:
CREATE TABLE
- 增删改查:
INSERT
,DELETE
,UPDATE
,SELECT
- 创建数据库:
- 维护:备份用
mysqldump
,恢复用mysql < backup.sql
。
其他:PostgreSQL和mysql功能比较
PostgreSQL 和 MySQL 是两种最流行的开源关系型数据库,它们在功能、性能、适用场景等方面各有优劣。以下是详细比较:
1. 基本概述
表格
特性 | PostgreSQL | MySQL |
---|---|---|
类型 | 对象关系型数据库 (ORDBMS) | 纯关系型数据库 (RDBMS) |
开发方 | 开源社区 (PostgreSQL Global Development Group) | Oracle 公司 (原属 Sun,后被收购) |
许可协议 | PostgreSQL License (类 BSD) | GPL (社区版) / 商用需付费 |
主要版本 | 最新稳定版:16 (2023年) | 最新稳定版:8.0 (2023年) |
默认存储引擎 | 单一存储引擎 (基于表) | 多存储引擎 (InnoDB、MyISAM 等) |
2. 功能对比
(1) SQL 标准支持
表格
特性 | PostgreSQL | MySQL |
---|---|---|
ACID 事务 | ✅ 完全支持 | ✅ (仅 InnoDB) |
窗口函数 | ✅ 完善支持 | ✅ 8.0+ 支持 |
CTE (WITH 子句) | ✅ 支持 | ✅ 8.0+ 支持 |
JSON/JSONB 支持 | ✅ (JSONB 支持索引) | ✅ (部分功能) |
地理空间数据 (GIS) | ✅ PostGIS 扩展 | ✅ 有限支持 |
自定义函数/存储过程 | ✅ PL/pgSQL、Python、Perl 等 | ✅ 存储过程语法较简单 |
(2) 高级功能
表格
特性 | PostgreSQL | MySQL |
---|---|---|
物化视图 | ✅ 支持 | ❌ 不支持 |
递归查询 | ✅ 支持 | ✅ 有限支持 |
表继承 | ✅ 支持 | ❌ 不支持 |
并行查询 | ✅ 支持 (优化复杂查询) | ✅ 有限支持 |
全文检索 | ✅ TSVector/TSQuery | ✅ 全文索引 |
3. 性能对比
表格
场景 | PostgreSQL | MySQL |
---|---|---|
OLTP (短事务) | ⚡ 优化较好,适合高并发写操作 | ⚡ InnoDB 优化极佳,简单查询更快 |
OLAP (复杂分析) | ✅ 并行查询、CTE、高级聚合更强 | ❌ 复杂分析性能较差 |
读性能 | 较优 (但优化器复杂,查询计划可能不稳定) | ⚡ 简单查询极快 |
高并发写入 | ✅ 支持行级锁、多版本并发控制 (MVCC) | ✅ InnoDB 支持,但锁竞争可能更明显 |
分区表性能 | ✅ 原生分区表支持 (10+) | ✅ 8.0+ 支持,但功能较弱 |
4. 扩展性与生态系统
表格
特性 | PostgreSQL | MySQL |
---|---|---|
扩展插件 | ✅ 丰富 (PostGIS, TimescaleDB, Citus) | ❌ 较少 |
主从复制 | ✅ 逻辑/物理复制 (WAL) | ✅ 基于 binlog |
分片 (Sharding) | ✅ Citus 扩展 | ❌ 需中间件 (Vitess) |
云服务支持 | AWS RDS/Aurora、Azure DB、GCP Cloud SQL | ✅ AWS RDS/Aurora 更成熟 |
ORM 支持 | Django、SQLAlchemy、TypeORM 等 | ✅ 几乎所有框架支持 |
5. 适用场景
✅ PostgreSQL 更适合:
- 复杂查询 & 分析:数据仓库、BI 分析、GIS 应用。
- 企业级应用:需要严格 ACID、高级 SQL 功能(如窗口函数)。
- 自定义扩展:需要 PostGIS (地理数据)、TimescaleDB (时序数据) 等插件。
✅ MySQL 更适合:
- Web 应用 & 高并发 CRUD:如电商、博客、CMS (WordPress)。
- 简单场景:不需要复杂 SQL、只需要快速读写。
- 云托管服务:AWS Aurora MySQL 优化极佳
6. 选择建议
表格
情况 | 推荐数据库 |
---|---|
需要高级 SQL (CTE/窗口函数) | PostgreSQL |
简单 Web 应用,高并发读写 | MySQL |
GIS/地理数据处理 | PostgreSQL + PostGIS |
金融系统 (严格 ACID) | PostgreSQL |
时序数据 (IoT/监控) | PostgreSQL + TimescaleDB |
需要轻量级、易管理 | MySQL |
PostgreSQL和mysql资源比较
以下是 PostgreSQL 和 MySQL 在 资源占用情况 和 硬件要求 方面的详细对比,帮助你根据实际环境选择最合适的数据库。
1. 内存占用
表格
方面 | PostgreSQL | MySQL |
---|---|---|
默认配置 | 通常占用较多内存(默认 shared_buffers 较大) | InnoDB 默认 innodb_buffer_pool_size 较小 |
高负载优化 | 需要手动调优 shared_buffers , work_mem 等 | InnoDB 自适应缓存机制更友好 |
简单查询内存占用 | 较高(查询计划器复杂) | 较低(优化器轻量,适合短查询) |
复杂查询内存占用 | 可控(支持并行查询时可能更高) | 可能因复杂 join 占用较多临时表 |
结论:
- PostgreSQL 默认占用内存较高,但在复杂查询上更可控。
- MySQL 短查询更省内存,但大表 join 时可能会有临时表问题。
2. CPU 需求
表格
方面 | PostgreSQL | MySQL |
---|---|---|
OLTP (短事务) | 优化较好,但单核性能弱于 MySQL | 单核性能更优(InnoDB 引擎优化更好) |
OLAP (复杂查询) | 并行查询优化更佳(多核利用更强) | 复杂分析查询性能较差 |
并发连接影响 | 1 个连接 ≈ 10MB 内存占用 | 较轻量(连接池优化更好) |
结论:
- PostgreSQL 适合 多核 CPU(并行查询优化好)。
- MySQL 在 单核高频 CPU 上表现更好(如 Web 服务)。
3. 磁盘 I/O 与存储
表格
方面 | PostgreSQL | MySQL |
---|---|---|
默认存储引擎 | 单一存储引擎(堆表 + TOAST 大对象) | 多引擎(InnoDB 适合事务,MyISAM 适合读密集型) |
WAL/事务日志 | WAL (Write-Ahead Log) 保证数据安全 | redo log + binlog 双重保障 |
索引类型 | B-tree、Hash、GiST (地理索引)、GIN (全文索引) | B-tree、Full-text、R-tree (MyISAM) |
数据压缩 | 支持 TOAST 自动压缩大字段 | InnoDB 表压缩(透明页压缩) |
结论:
- PostgreSQL 适合 高频写入 & 复杂查询(WAL 优化好)。
- MySQL InnoDB 更省 I/O(适配 SSD 优化更好)。
4. 网络与连接管理
表格
方面 | PostgreSQL | MySQL |
---|---|---|
最大连接数 | 受 max_connections 限制(默认 100) | 理论更高(连接池优化更成熟) |
连接开销 | 每个连接 ≈ 5-10MB 内存 | 更轻量(连接池如 thread_pool ) |
长连接优化 | 需要定期维护(VACUUM ) | 连接池方案更成熟(如 ProxySQL) |
结论:
- MySQL 更适合 高并发短连接(如 Web 应用)。
- PostgreSQL 适合 长连接 & 复杂会话(如数据分析)。
5. 硬件推荐配置
(1) 小型应用(1-10万行数据)
表格
资源 | PostgreSQL | MySQL |
---|---|---|
CPU | 2 核 | 1-2 核 |
内存 | 2-4 GB | 1-2 GB |
存储 | 20 GB SSD | 10 GB SSD |
(2) 中型应用(100万行以上)
表格
资源 | PostgreSQL | MySQL |
---|---|---|
CPU | 4-8 核 | 4 核 |
内存 | 8-16 GB | 4-8 GB |
存储 | 100 GB NVMe | 50 GB NVMe |
(3) 大型企业级(千万行+)
表格
资源 | PostgreSQL | MySQL |
---|---|---|
CPU | 16+ 核 | 8-16 核 |
内存 | 32-64 GB | 16-32 GB |
存储 | 1TB+ NVMe | 500GB+ NVMe |
6. 优化建议
PostgreSQL 优化
- 内存优化:
- 调高
shared_buffers
(25% 总内存)。 - 设置
work_mem
优化排序/哈希操作。
- 调高
- I/O 优化:
- 启用
effective_io_concurrency
(NVMe SSD 可设 200+)。 - 使用
pg_repack
减少表膨胀。
- 启用
- 连接管理:
- 使用
PGBouncer
连接池。
- 使用
MySQL 优化
- 内存优化:
- 调整
innodb_buffer_pool_size
(70-80% 总内存)。
- 调整
- I/O 优化:
- 启用
innodb_io_capacity
(SSD 可设 2000+)。
- 启用
- 连接管理:
- 使用
ProxySQL
或 MySQL Router。
- 使用
总结
选型推荐
表格
场景 | 推荐数据库 | 理由 |
---|---|---|
简单 Web 应用 | MySQL | 低资源占用,高并发短查询优化好 |
数据分析/GIS | PostgreSQL | 并行计算、扩展性强 |
金融/强一致性系统 | PostgreSQL | 严格 ACID,MVCC 支持更完善 |
超高并发 OLTP | MySQL | InnoDB 单核性能更优 |
关键结论:
- PostgreSQL 更吃内存(但复杂查询可控)。
- MySQL 更省 CPU(简单查询极快)。
- 存储方面,两者都依赖 SSD/NVMe,但 MySQL 的 InnoDB 对 SSD 优化更好。
其他轻量级数据库
如果你的应用场景较为简单,数据量不大(几千到几十万行),并且希望 轻量级、低资源占用 的关系型数据库,以下是几种比 PostgreSQL 和 MySQL 更轻量 的推荐方案:
1. SQLite(嵌入式数据库,极致轻量)
✅ 最适合:单机应用、移动端、IoT、小型工具
❌ 不适合:高并发写入、多客户端访问
表格
特点 | 说明 |
---|---|
无服务架构 | 无需安装数据库服务,直接读写本地文件(.db 或 .sqlite )。 |
零配置 | 开箱即用,无需用户管理、连接池或权限控制。 |
超低资源占用 | 内存占用 ≈ 几 MB,存储空间极小(数据库即单个文件)。 |
兼容性 | 支持标准 SQL(包括事务、索引、触发器、视图)。 |
适用场景:
- 桌面应用(如 Electron 应用)
- 移动端 App(Android/iOS 默认支持)
- 小型工具或脚本的本地数据存储
- 开发和测试环境快速原型
2. DuckDB(OLAP 嵌入式数据库,分析优化)
✅ 最适合:数据分析、轻量级 ETL、本地 BI
❌ 不适合:高频写入、多用户并发
表格
特点 | 说明 |
---|---|
列式存储 | 针对分析查询优化(类似 SQLite,但更适合聚合操作)。 |
高性能 | 在单机环境中比 SQLite 更擅长复杂分析。 |
兼容 PostgreSQL 语法 | 学习成本低,支持窗口函数、CTE 等高级 SQL。 |
适用场景:
- 本地数据分析(替代 Excel 复杂操作)
- 日志分析或轻量级数仓
- 科学计算(Pandas 替代方案)
3. H2 Database(Java 嵌入式数据库)
✅ 最适合:Java/Kotlin 应用、Spring Boot 测试
❌ 不适合:非 Java 生态、超高并发
表格
特点 | 说明 |
---|---|
纯 Java 实现 | 可作为内存数据库或文件存储,支持 JDBC。 |
内存模式 | 启动快,适合单元测试(如 Spring Boot @DataJpaTest )。 |
Web 控制台 | 内置管理界面(类似 PHPMyAdmin)。 |
适用场景:
- Java/Kotlin 应用的本地开发
- 快速原型验证
- 自动化测试(替代 MySQL 减少依赖)
Spring Boot 配置(application.properties
):
4. MariaDB Embedded(MySQL 轻量版)
✅ 最适合:需要兼容 MySQL 但资源有限
❌ 不适合:非嵌入式场景
表格
特点 | 说明 |
---|---|
兼容 MySQL 语法 | 直接替代 MySQL,但更轻量(适合嵌入式设备)。 |
低内存占用 | 比完整版 MySQL 节省约 30% 内存。 |
适用场景:
- 树莓派等嵌入式设备
- 需要 MySQL 语法但资源受限的环境
5. 极致轻量方案对比
表格
数据库 | 语言 | 存储方式 | 内存占用 | 适用场景 |
---|---|---|---|---|
SQLite | C | 单文件 | 几 MB | 本地应用、移动端 |
DuckDB | C++ | 单文件/内存 | 10-100 MB | 数据分析、BI |
H2 Database | Java | 内存/单文件 | 10-50 MB | Java 应用、测试 |
MariaDB Embedded | C | 文件/内存 | 50-100 MB | 兼容 MySQL 的嵌入式环境 |
如何选择?
- 需要极致轻量 + 单机使用 → SQLite
- 数据分析 + 兼容 PostgreSQL → DuckDB
- Java 生态 + 快速测试 → H2 Database
- 兼容 MySQL + 嵌入式设备 → MariaDB Embedded
这些数据库在简单应用中完全可以替代 MySQL/PostgreSQL,资源占用降低 10 倍以上(如 SQLite 内存消耗 ≈ 5MB,而 MySQL 至少 100MB)。