MySQL

一、安装 MySQL

sql 复制代码
sudo apt update
sudo apt install mysql-server -y

二、检查与管理 MySQL 服务

sql 复制代码
mysql --version                     # 查看版本
sudo systemctl start mysql          # 启动 MySQL
sudo systemctl stop mysql           # 停止 MySQL
sudo systemctl restart mysql        # 重启 MySQL
sudo systemctl status mysql         # 查看状态
sudo systemctl enable mysql         # 设置开机自启
sudo systemctl is-enabled mysql     # 检查是否已设置开机自启

三、登录 MySQL

sql 复制代码
sudo mysql

登录成功后,提示符变为 mysql>

四、基本操作测试

sql 复制代码
show databases;
select version();
exit;

五、设置 root 密码

在 MySQL 中执行以下命令:

sql 复制代码
alter user 'root'@'localhost' identified with mysql_native_password by '你的密码';
flush privileges;

设置后,下次登录需使用:

sql 复制代码
mysql -u root -p
bash 复制代码
mysql -h 127.0.0.1 -P 3306 -u root -p
参数 含义
-h 主机地址
-P 端口号(大写 P)
-u 用户名
-p 需要输入密码

注意: 密码输入时不会显示,直接输入即可。

六、安全配置

sql 复制代码
sudo mysql_secure_installation

按提示完成以下配置:

选项 你的选择 实际操作与效果
1. 密码验证组件 n (否) 没有安装 密码强度检查工具。这意味着之后你可以设置任意简单密码(如 123456),不会强制要求复杂密码。适合个人开发环境。
2. 移除匿名用户 y (是) 删除了允许空用户名连接的匿名账户。效果:任何人都无法再无需账号直接访问你的数据库。
3. 禁止 root 远程登录 y (是) 禁止 root 账户从其他机器(如你的另一台电脑)连接数据库。效果:root 只能从本机(localhost)登录,大大降低了被远程暴力破解的风险。
4. 移除测试数据库 y (是) 删除 了名为 test 的示例数据库及其所有访问权限。效果:数据库列表更干净,也避免了因该库默认权限宽松带来的潜在风险。
5. 重载权限表 y (是) 立即生效 以上所有更改,相当于执行了一次 FLUSH PRIVILEGES;。效果:无需重启 MySQL 服务,安全设置就立刻应用了。

禁用了密码强度检查,删除了匿名用户和测试库,禁止了 root 远程登录,让 MySQL 从一个"默认开放"的状态变成了一个"基本安全"的状态,非常适合个人开发环境。

七、快速验证命令

bash 复制代码
sudo mysql -e "SELECT VERSION(); SHOW DATABASES;"

八、MySQL 目录结构

路径 说明
/etc/mysql/ 配置文件目录
/var/lib/mysql/ 数据库数据存储目录
/var/log/mysql/ 日志文件目录

九、MySQL 核心概念

命令 说明
mysql 数据库客户端
mysqld 数据库服务端

数据库本质: 对数据内容存储的一套解决方案。

在 Linux 中:

  • 建立数据库 → 在 /var/lib/mysql 下创建一个目录

  • 建立表 → 在该目录下创建对应的文件

  • 数据库本质也是文件,但由数据库服务统一管理,不直接由程序员操作

十、编码集说明

术语 说明
数据库编码集 数据库未来存储数据使用的编码
数据库校验集 支持字段比较使用的编码,本质是读取数据时采用的编码格式

MySQL 8.0 新特性: 引入了全新的"数据字典",将所有数据库的元数据(包括字符集信息)统一管理,因此不再需要 db.opt 这类分散的元数据文件。

十一、SQL 分类

分类 全称 说明 代表指令
DDL Data Definition Language 维护存储数据的结构 createdropalter
DML Data Manipulation Language 对数据进行操作 insertdeleteupdate
DQL Data Query Language 数据查询(DML 子集) select
DCL Data Control Language 权限管理和事务 grantrevokecommit

十二、存储引擎

存储引擎是数据库管理系统如何存储数据、如何建立索引、如何更新和查询数据等技术的实现方法。

MySQL 核心特性: 插件式存储引擎,支持多种存储引擎。

查看支持的存储引擎:

sql 复制代码
show engines;

十三、数据库操作

13.1 创建数据库

sql 复制代码
create database [if not exists] db1;

创建指定字符集和校验规则的数据库:

sql 复制代码
create database db2 charset=utf8 collate utf8_general_ci;

13.2 查看字符集与校验规则

sql 复制代码
show variables like 'character_set_database';
show variables like 'collation_database';
show charset;                     -- 查看支持的字符集
show collation;                   -- 查看支持的校验规则

13.3 查看数据库

sql 复制代码
show databases;

13.4 查看建库语句

sql 复制代码
show create database 数据库名;

13.5 修改数据库

sql 复制代码
alter database mytest charset=gbk;

13.6 删除数据库

sql 复制代码
drop database [if exists] 数据库名;

13.7 查看当前使用哪个库

sql 复制代码
SELECT DATABASE();

十四、数据库备份与恢复

14.1 备份

项目 无密码模式 有密码模式
认证方式 Unix socket(系统用户认证) mysql_native_password(密码认证)
备份命令 sudo mysqldump -u root -B 库名 > 备份.sql mysqldump -u root -p密码 -B 库名 > 备份.sql
是否需要 sudo ✅ 需要 ❌ 不需要
-p 参数 不写 必须写
你的测试结果 ✅ 成功 ❌ 报错 1698

示例:

sql 复制代码
mysqldump -P3306 -u root -p123456 -B mytest > D:/mytest.sql

14.2 备份多张表

sql 复制代码
mysqldump -u root -p 数据库名 表名1 表名2 > 备份文件路径.sql

14.3 备份多个数据库

sql 复制代码
mysqldump -u root -p -B 数据库名1 数据库名2 ... > 备份文件路径.sql

14.4 恢复数据库

复制代码
# 终端执行
sudo mysql < backup.sql

# 登录后执行
sudo mysql
mysql> source backup.sql;

注意: 如果备份时没有带 -B 参数,需要先创建空数据库,再使用 source 恢复。

参数 备份文件包含
-B CREATE DATABASE + CREATE TABLE + 数据
不带 -B 只有 CREATE TABLE + 数据(没有建库语句)

十五、查看连接情况

sql 复制代码
show processlist;

可以查看当前有哪些用户连接到 MySQL。

十六、表操作

16.1 创建表

sql 复制代码
create table table_name (
    列名1 类型,
    列名2 类型,
    列名3 类型
) character set 字符集 collate 校验规则 engine 存储引擎;

不同的存储引擎,创建表时生成的文件不一样。

16.2 查看表结构

sql 复制代码
desc 表名;                              -- 简洁版
show create table 表名 \G              -- 完整版(含引擎、字符集)

16.3 修改表结构

sql 复制代码
-- 添加列
alter table 表名 add (列名 数据类型 [default 默认值]);

-- 修改列
alter table 表名 modify (列名 新数据类型 [default 新默认值]);

-- 删除列
alter table 表名 drop (列名);

⚠️ 警告: 删除字段要小心,字段及其对应的列数据都没了。

16.4 修改表示例

sql 复制代码
create table emp (
    id number,
    name varchar2(20)
);

alter table emp add (age number default 18, hire_date date);
alter table emp modify (name varchar2(50) default '匿名', age number default 20);
alter table emp drop (hire_date);

16.5 删除表

sql 复制代码
drop table 表名;

十七、MySQL 常用数据类型

17.1 数值类型

类型 字节 范围 用途
tinyint 1 -128~127 年龄、状态
int 4 -21亿~21亿 id、数量 ✅
bigint 8 超大 流水号
decimal(m,d) 可变 精确小数 金额 ✅

17.2 小数类型细节

类型 说明 特点
float 单精度 4字节,有精度误差
double 双精度 8字节,有精度误差
decimal(m,d) 精确小数 无精度误差,金融必用 ✅
sql 复制代码
salary decimal(10,2)   -- 总10位,小数2位,范围 -99999999.99 ~ 99999999.99

17.3 字符串类型

类型 最大长度 用途
char(n) 255 固定长度(手机号、身份证)
varchar(n) 65535 可变长度 ✅
text 65535 长文本(文章、备注)

17.4 enum 和 set

类型 说明 特点
enum 单选 从预定义值中选一个
set 多选 从预定义值中选多个
sql 复制代码
gender enum('男','女','保密') default '保密';      -- 单选
hobby set('篮球','足球','音乐','读书');            -- 多选(可存 '篮球,音乐')

set 查询函数:

sql 复制代码
select * from user where find_in_set('篮球', hobby);   -- 查找爱好包含篮球的用户

17.5 日期时间类型

类型 格式 用途
date yyyy-mm-dd 生日、日期
datetime yyyy-mm-dd hh:mm:ss 常用 ✅
timestamp yyyy-mm-dd hh:mm:ss 自动更新

17.6 bit 类型

类型 说明 用途
bit(n) 二进制位,n=1~64 存储标志位(0/1)
sql 复制代码
is_vip bit(1) default b'0';          -- 0表示否,1表示是
status bit(2);                        -- 可存 00,01,10,11
insert into user (is_vip) values (b'1');

17.7 常用速查表

用途 推荐类型
id、数量 int
年龄、状态 tinyint
金额 decimal(10,2)
姓名、标题 varchar(50)
手机号 char(11)
文章内容 text
性别(单选) enum('男','女')
爱好(多选) set
是否 VIP(二选一) bit(1)
创建时间 datetime

17.8 完整建表示例

sql 复制代码
create table user (
    id int primary key auto_increment,
    name varchar(50) not null,
    age tinyint default 18,
    phone char(11),
    salary decimal(10,2),
    gender enum('男','女','保密') default '保密',
    hobby set('篮球','足球','音乐','读书'),
    is_vip bit(1) default b'0',
    create_time datetime default current_timestamp
);

17.9 set 查询示例

sql 复制代码
-- 查找爱好包含篮球的用户
select * from user where find_in_set('篮球', hobby);

-- 查找是 VIP 的用户
select * from user where is_vip = b'1';
相关推荐
ん贤2 小时前
数据库事务
数据库·mysql·事务
爱学习的小邓同学2 小时前
MySQL --- MySQL库和表的操作
数据库·mysql
Bert.Cai3 小时前
MySQL简介
数据库·mysql
摇滚侠3 小时前
Redis 和 MySQL 数据同步方案,ElasticSearch 和 MySQL 数据同步方案
java·redis·mysql
披着羊皮不是狼4 小时前
(9)批量生成文章并同步存入 MySQL 和 Redis
数据库·redis·mysql
七夜zippoe4 小时前
DolphinDB SQL查询:从简单到复杂
数据库·sql·mysql·查询·dolphindb
wuyikeer5 小时前
如何在docker中的mysql容器内执行命令与执行SQL文件
sql·mysql·docker
y = xⁿ6 小时前
MySQL:事务机制
数据库·mysql
阿里-于怀7 小时前
Agent 构建变轻、Agent 架构变薄,什么正在变厚?
数据库·mysql·架构·agent·claude·manus·openclaw