MySQL 学习小记
安装 MySQL
由于安装并不是本文着重记录的点,故安装过程就简单过一下,个人学习使用推荐使用 Docker 安装,简单快捷且不会有残留文件。
使用 Docker 快速创建本地练习环境
使用 Docker 搭建 MySQL 学习环境无疑是最简单快捷的方式,不挑平台可跳过繁琐冗杂的安装部署过程。若还不会使用 Docker 可参考这篇教程(还没写待更新hhh)。
1 | |
Linux
Ubuntu/Debian 系列
1 | |



CentOS/RHEL 系列
1 | |
Windows
在 Windows 上安装 MySQL 最简单的方式是使用 MySQL Installer(官方提供的图形化安装工具)
下载 MySQL Installer: 前往 MySQL官网 下载适合你系统的版本。

运行安装程序:
- 选择合适的安装类型(开发者默认、服务器等)。
- 根据提示选择安装的组件(例如 MySQL Server、Workbench 等)。
- 设置 root 密码并进行基本配置。
完成安装并启动 MySQL 服务。
macOS
使用 Homebrew 安装
Homebrew 是一个流行的包管理器,最初为 macOS 设计,后来也扩展到了 Linux 系统。它的主要目的是简化软件安装过程,推荐 macOS 用户安装。若没有 Homebrew 可以参考这篇教程,
1 | |
使用 DMG 安装包
前往 MySQL 官网 下载适用于 macOS 的 DMG 文件。

安装 DMG 文件:
- 双击 DMG 文件,按照安装向导进行安装;
- 配置 MySQL;
- 安装完成后,可以使用
System Preferences(系统偏好设置)中的 MySQL 控制面板启动或停止 MySQL 服务。
配置密码: 安装完成后,默认情况下 root 用户没有密码。你可以通过命令行或 MySQL Workbench 来设置密码:
1
2mysql -u root
ALTER USER 'root'@'localhost' IDENTIFIED BY 'your_new_password';
源码安装
本文仅作文 MySQL 入门,不采用源码安装方式,源码安装虽然提供更高的定制性和灵活性,但安装过程复杂、维护和更新困难、依赖管理繁琐,并且可能影响系统稳定性,适合对性能和配置有高度要求的用户。
安装 MySQL 客户端
mysql
这是 MySQL 数据库默认的命令行工具,适用于执行 SQL 查询、管理数据库和与 MySQL 服务器进行交互。它是 MySQL 安装时自带的基本工具,功能相对简单,主要用于传统的 SQL 查询和数据库管理。
若是使用 Docker 安装的 MySQL 服务器,则需要单独安装该客户端,macOS 安装方式为
1 | |
MySQL Shell
这是一个更为高级和灵活的命令行工具,支持 SQL、JavaScript 和 Python 脚本,适用于更复杂的数据库管理任务、自动化和开发工作。MySQL Shell 引入了更现代的特性,如对 JSON 数据类型的原生支持、对高级数据库管理操作的增强功能(例如与 MySQL InnoDB 集群和 MySQL 8.0 特性的兼容性),并且在功能上比 mysql 客户端更强大。
下载地址:https://dev.mysql.com/downloads/shell/
1 | |
MySQL Workbench
MySQL Workbench 是 MySQL 官方提供的图形化数据库管理工具,集成了数据库设计、查询执行、性能监控、数据建模等功能,适用于开发人员和数据库管理员。它提供直观的界面,方便进行数据库管理和 SQL 调试。
下载地址:https://dev.mysql.com/downloads/workbench/
DBeaver
DBeaver 是一款跨平台的开源数据库管理工具,支持 MySQL 以及多种数据库系统。它提供强大的 SQL 编辑器、查询执行和数据浏览功能,适合开发人员、数据库管理员和数据分析师使用,支持多种数据库和扩展插件。
下载地址:https://dbeaver.io/download/
Navicat for MySQL(收费)
Navicat for MySQL 是一款商业化的数据库管理工具,提供丰富的图形化界面和多种功能,如数据同步、备份恢复、查询优化等,适用于开发人员和数据库管理员。它支持 MySQL 和 MariaDB,并具有强大的可视化管理功能和易用性。
下载地址:https://www.navicat.com/en/products/navicat-for-mysql
MySQL 基础使用
连接服务器
1 | |

查询数据库:show databases;

切换数据库:use mysql;

查询数据表:show tables;

简单查询数据:select * from tables_priv;

SQL 语句
分类
DDL 数据定义语言
全称:Data Definition Language
语句:CREATE DROP ALERT TRUNCATE
DML 数据操作语言
全称:Data Manipulation Language
语句:INSERT UPDATE DELETE CALL
DQL 数据查询语言
全称:Data Query Laguage
语句:SELECT
DCL 数据控制语言
全称:Data Control Language
语句:GRANT REVOKE
创建数据库
create database game;

删除数据库
drop database game;

创建数据表,同时指定默认值
1 | |

查询表结构
desc player;

创建数据表


修改数据表结构
更改字段数据类型
alter table player modify column name VARCHAR(200);

更改字段名
alter table player rename column name to nick_name;

添加字段
alter table player add column last_login DATETIME;

删除字段
alter table player drop column gold;

删除数据表
drop table player;

插入数据
插入一条数据
insert into player (id, name) values (1, "张三");


插入多条数据
insert into player (id, name) values (2, "李四"), (3, "王五");

更新数据
update player set level=3 where id=1;

update player set gold=9.99 where id=3;

删除数据
delete from player where gold=0;

导出数据
mysqldump -h 127.0.0.1 -u root -p game > game.sql


导入数据
mysql -h 127.0.0.1 -u root -p game < game.sql



更进一步
WHERE 子句
select * from player where level = 1;

select * from player where level > 1;

select * from player where level > 1 and level < 5;

select * from player where level > 1 and level < 5 or exp > 1 and exp <5;

select * from player where level > 1 and (level < 5 or exp > 1) and exp <5;

select * from player where level in (1, 3, 5);

select * from player where level not in (1, 3, 5);

select * from player where level between 1 and 10;

select * from player where level not between 1 and 10;

select * from player where level >= 1 and level <= 10;

select * from player where email is null;

select * from player where email is null or email='';

select * from player where email is not null;

select * from player where name like '王%'; % 匹配任意多个字符

select * from player where name like '%王%';

select * from player where name like '王_';

select * from player where name like '__王';

正则表达式

select * from player where name regexp '^王.$';

select * from player where name regexp '王';

select * from player where name regexp '[王张]';

select * from player where name regexp '王|张';

正则表达式练习:
1 | |
ORDER BY
select * from player order by level; 默认为升序排序

select * from player order by level desc;

select * from player order by 5; 使用列数排序

常用聚合函数

select count(*) from player;

select avg(level) from player;

GROUP BY
1 | |

统计每个等级玩家数量:select level, count(level) from player group by level;

HAVING
select level, count(level) from player group by level having count(level) > 4;

select level, count(level) from player group by level having count(level) > 4 order by count(level) desc;

1 | |

1 | |

DISTINCT
select distinct sex from player;

UNION 并集
select * from player where level between 1 and 3 union select * from player where exp between 1 and 3;

不去重:select * from player where level between 1 and 3 union all select * from player where exp between 1 and 3;

INTERSECT 交集
select * from player where level between 1 and 3 intersect select * from player where exp between 1 and 3;

EXCEPT 差集
select * from player where level between 1 and 3 except select * from player where exp between 1 and 3;

子查询
select * from player where level > (select avg(level) from player);

1 | |

利用子查询建表:create table new_player select * from player where level < 5;


利用子查询向表中插入数据:
insert into new_player select * from player where level between 6 and 10;


EXISTS
select exists (select * from player where level > 100);

select exists (select * from player where level > 10);

联表查询
内连接 INNER JOIN
只返回两个表中都有的数据

1 | |


左连接 LEFT JOIN
返回左表中所有的数据和右表中匹配的数据,右表中没有的数据 NULL 填充
1 | |

右连接 RIGHT JOIN
返回右表中所有的数据和左表中匹配的数据,左表中没有的数据 NULL 填充
1 | |

视图
创建视图
1 | |


视图会随原内容更新而更新,如修改原前十名数据,则 top10 视图也会随之发生变化:


更新视图
1 | |


删除视图
drop view top10;

索引
查询数据量:select count(*) from fast;

查询表结构:DESC fast;

创建索引
1 | |

查询索引
show index from fast;

在有无索引的表中分别查询数据:
1 | |




删除索引
drop index email_index on fast;


(部分细节内容待更新)