

**前引:**在数据驱动的时代,数据库已成为各类应用系统的核心基石,而MySQL作为开源关系型数据库的标杆,凭借其高效、稳定、易用的特性,被广泛应用于Web开发、企业级应用、数据分析等众多领域。无论是初入IT行业的新手,还是需要夯实基础的开发者,掌握MySQL的安装配置与核心概念,都是开启数据操作之旅的关键第一步。
本教程专为MySQL初学者打造,将摒弃复杂晦涩的理论堆砌,以"实用导向"为核心,从环境准备出发,手把手带您完成MySQL的安装与基础配置,扫清入门阶段的环境障碍;同时,我们将系统梳理数据库、表、字段、SQL语句等核心概念,让您不仅"会操作",更能"懂原理"。无论您是为了课程学习、项目开发,还是职业技能提升,跟随本教程的节奏,都能快速搭建起MySQL的知识框架,为后续的查询优化、数据管理等进阶内容打下坚实基础!
目录
[(2)检查与获取官方MySQL yum源](#(2)检查与获取官方MySQL yum源)
【一】环境安装(Ubuntu)
以下所有操作建议使用 root 权限,或者给普通用户添加 sudo 权限
(1)卸载部分环境
cpp
//停止MySQL服务
sudo service mysql stop
//卸载MySQL服务器
sudo apt remove --purge mysql-server mysql-client mysql-common mysql-server-core-* mysql-client-core-*
//删除相关依赖
sudo apt autoremove
//删除配置文件和数据
sudo rm -rf /etc/mysql /var/lib/mysql
//清理残余的文件
sudo rm -rf /etc/mysql* /var/lib/mysql* /var/log/mysql*
//刷新系统包管理器
sudo apt update
(2)检查与获取官方MySQL yum源
(1)更新+安装
cpp
//更新系统的软件包列表
sudo apt-get update
//安装MySQL服务器
sudo apt install mysql-server
//看是否启动MySQL服务器
ps aux | grep mysql
(2)查看是否启动成功
启动成功:

如果没有启动:
cpp
sudo service mysql start
(3)登录MySQL(开始默认不需要密码)
cpp
mysql
(4)查看 root 用户的身份验证方式
cpp
SELECT user, host, plugin FROM mysql.user WHERE user = 'root';

注意:这个红框的下面需要改成 mysql_native_password 方式
(5)修改身份验证方式
cpp
ALTER USER 'root'@'localhost' IDENTIFIED WITH 'mysql_native_password' BY 'your_password';
注意:设置MySQL中 root 身份下的密码(自己替换)需要加 ' ',例如:
.............WITH 'mysql_native_password' BY '12345678910';
(6)刷新权限
cpp
FLUSH PRIVILEGES;
(3)关闭+重启
MySQL运行的是守护进程,如果你想退出当前的MySQL服务,回到正常模式:输入 quit 即可

如果你想重新启动MySQL服务,输入下面指令,再输入刚才设置的密码即可:
cpp
# 执行后会提示输入密码,输入正确密码即可登录
mysql -u root -p

【二】数据库介绍
**定义:**数据库是一个专业、高效存储和管理数据的仓库(即存储数据的地方)
为何有了各种存储设备还需要数据库?
(1)查询高效:比如从几十亿文件中捞几个文件等各种查询工作完全胜过单磁盘存储
(2)安全可控:有权限设置,删除、进入数据库需要密码
(3)程序友好:提供各种接口可以轻松连接软件程序
在你的设置上只要安装了MySQL就会存在:mysql 和 mysqld
mysql:MySQL客户端(相当于你下达指令的地方)

mysqld:MySQL服务端(对你下的指令执行,就是你设备上的守护进程,一直运行的软件程序)

【三】字符集和校验规则
**字符集:**输入字符到具体编码的转换(将你的输入指令变成可以执行的方法)转换规则
**校验规则:**基于字符集的一套字符比较与排序的算法(比较)规则(比如相等性、大小判断)
【四】主流数据库
数据库不只有MySQL一种,其中各有各的特点:

【五】服务器、数据库、表关系

MySQL在你的设备上是一个管理软件(因此它是别人上架的一种网络服务)
DB(数据库)相当于是一个个**目录(逻辑结构),**下面以目录作为称呼!
那么"表"又是一个个小的目录(逻辑结构),通常用来存储同一类别的文件信息
【六】MySQL架构
可以看到除了最底层(系统调用),上面都是应用层的封装。MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 Unix/Linux、Windows、 Mac 和 Solaris。

【七】MySQL基本使用
(1)进入数据库
作用:进入数据库软件
cpp
mysql -u root -p

(2)查看数据库
作用:查看当前MySQL(管理数据软件)中的一个个目录(DB):
cpp
show databases;

(3)创建数据库
cpp
create database 创建的数据库名;
作用:直接创建一个指定的数据库

我们显示所有的目录(DB):可以看见 hello 的存在

cpp
create database if not exists hello
作用:加上(if not exists)表示如果存在只会提醒(不是报错),不存在就创建
(4)删除数据库
作用:删除指定的数据库名称
cpp
drop database 删除的数据库名;

我们再次显示所有目录(DB):

(5)表的基本操作
(1)创建表
首先我们需要在指定的数据库中操作,假设现在存在数据库:hello
先选中数据库:
cpp
use hello; # 切换到hello数据库,执行后会提示"Database changed"
例如:

创建表:(字段名就是变量名,字段类型我们后面会讲解!)
cpp
create table 表名(
字段名1 字段类型,
字段名2 字段类型
);
例如:

创建表时可以选中字符集和检验规则:
cpp
create table 表名 (
id int,
name varchar(20) comment '用户名',
password char(32) comment '密码是32位的md5值',
birthday date comment '生日'
) character set 字符集 engine 校验规则;
例如:

(2)插入数据
作用:相当于给结构体插入具体数据
cpp
insert into 表名(字段名称(逗号区分))
values (插入的数据(逗号区分));
例如:

(3)显示表数据
作用:显示表中的数据
cpp
select * from 表名;
例如:

(6)查系统支持的字符集
cpp
show charset;
比如:支持utf8就可以使用中文,字符集以及校验规则在创建数据库时都是可以更改的

(7)查系统支持的校验规则
cpp
show charset;

(8)显示数据库部分属性
作用:显示该数据库的一些属性信息,比如可以查看它是不是使用了 utf8 的字符集等
cpp
show create database 数据库名;

(9)备份和修复
如何备份整个数据库?
我们在云服务器(其它设备也行)上建一个**.sql**后缀的文件:

在终端,然后直接输入指令:
cpp
mysqldump -u root -p 数据库名 > 文件名.sql(可加路径)
例如:

如何备份单张表?
依然需要在云服务器(其它设备也行)上建一个**.sql**后缀的文件:还是以 world.sql 为例
在终端,然后输入指令:
cpp
mysqldump -u 你的MySQL用户名 -p 数据库名 表名 > 文件名.sql
例如:

如何恢复整个数据库?
需要先有备份文件(.sql),在终端执行下面指令:
cpp
mysql -u 你的MySQL用户名 -p 目标数据库名 < 备份文件名.sql
如何恢复单张表?
需要先有备份文件(.sql),在终端执行下面指令:
cpp
mysql -u 你的MySQL用户名 -p 数据库名 < 表的备份文件名.sql
(10)查看连接情况
作用:查看当前有哪些用户连接了我们的数据库
cpp
show processlist;
例如:

【八】数据类型
数据库中对于数值的插入,一般有严厉的规定,如果超出范围会报错,不像语言可以截取
下面是经过处理的类型说明,方便快速上手使用:
| 分类 | 数据类型 | 核心说明 | 关键信息 / 范围 |
|---|---|---|---|
| 数值类型 | BIT(M) | 位类型,用于存储二进制数据 | M 指定位数(默认 1,范围 1~64) |
| TINYINT [UNSIGNED] | 极小整数类型,默认带符号,加UNSIGNED仅存正数 |
带符号:-128~127;无符号:0~255 | |
| BOOL | 布尔类型(本质是TINYINT(1)的别名) |
用 0 表示 "假"、1 表示 "真" | |
| SMALLINT [UNSIGNED] | 小整数类型,默认带符号 | 带符号:-2¹⁵~2¹⁵-1;无符号:0~2¹⁶-1 | |
| INT [UNSIGNED] | 常用整数类型,默认带符号 | 带符号:-2³¹~2³¹-1;无符号:0~2³²-1 | |
| BIGINT [UNSIGNED] | 大整数类型,默认带符号 | 带符号:-2⁶³~2⁶³-1;无符号:0~2⁶⁴-1 | |
| FLOAT[(M,D)] [UNSIGNED] | 单精度浮点小数,M = 总位数、D = 小数位数 | 占 4 字节,精度约 7 位有效数字 | |
| DOUBLE[(M,D)] [UNSIGNED] | 双精度浮点小数,精度高于 FLOAT | 占 8 字节,精度约 15 位有效数字 | |
| DECIMAL(M,D) [UNSIGNED] | 定点小数(无计算误差),M = 总长度、D = 小数位数 | 精准存储数值,适配金额 / 计费场景 | |
| 文本、二进制类型 | CHAR(SIZE) | 固定长度字符串 | 最大长度 255 字符 |
| VARCHAR(SIZE) | 可变长度字符串(更节省空间) | 最大长度 65535 字符 | |
| BLOB | 二进制数据类型(用于存文件、图片等二进制内容) | 无字符编码,纯二进制存储 | |
| TEXT | 大文本类型 | 不支持全文索引、不支持默认值 | |
| 时间日期类型 | DATE/DATETIME/TIMESTAMP | 日期 / 日期时间 / 时间戳类型 | 格式:DATE (yyyy-mm-dd)、DATETIME (带时分秒) |
| 枚举 / 集合类型 | ENUM 类型 | 字符串枚举对象,值只能选表定义时指定的一个选项 | 单选:值来自预定义列表 |
| SET 类型 | 字符串集合对象,值可选表定义时指定的多个选项(用逗号分隔) | 多选:值来自预定义列表,成员间用逗号分隔 |
小数类型:
| 小数类型 | 核心说明 | M/D 参数含义 | 精度特点 | 占用字节 | 取值范围(大致) |
|---|---|---|---|---|---|
| FLOAT[(M,D)] [UNSIGNED] | 单精度浮点型小数,MySQL 基础小数类型 | M = 总位数(整数 + 小数),D = 小数位数(0≤D≤53);省略则按实际存储适配 | 精度低(约 7 位有效数字),存在浮点误差 | 4 | -3.4×10³⁸ ~ 3.4×10³⁸(UNSIGNED 仅存正数) |
| DOUBLE[(M,D)] [UNSIGNED] | 双精度浮点型小数,精度高于 FLOAT | M = 总位数,D = 小数位数(0≤D≤53);省略则按实际存储适配 | 精度较高(约 15 位有效数字),仍可能有误差 | 8 | -1.8×10³⁰⁸ ~ 1.8×10³⁰⁸(UNSIGNED 仅存正数) |
| DECIMAL(M,D) [UNSIGNED](DEC (M,D) 别名) | 定点型小数(精准小数),专门解决浮点误差问题 | M = 总位数(1≤M≤65),D = 小数位数(0≤D≤30 且 D≤M);M/D 必填,需明确指定 | 100% 无计算误差,精准存储 | 按需分配(M+2 字节) | -10⁶⁵ ~ 10⁶⁵ - 1(由 M/D 限定具体范围) |
(1)最大字符数解释
如果我们看到如下这种数据类型+表格数字的样式:

含义:varchar 是 MySQL 里的 "可变长度字符串类型"
括号中的数字表示该字段允许存储的最多字符数量(注意是 "字符",不是 "字节")
(2)小数类型使用
M代表总数位数,D表示小数位数
cpp
CREATE TABLE product (
weight FLOAT(5,1), -- (总5位,小数1位,如999.9kg)
discount DOUBLE(3,2), -- (总3位,小数2位,如0.88)
price DECIMAL(10,2) -- (总10位,小数2位,最大99999999.99元)
);

