一、MySQL 基础概念
1. 定义与特性
关系型数据库:结构化数据存储在二维表中,表之间存在数据关联。
二维表结构:行(记录,描述一个对象)、列(字段,描述对象属性)。
核心用途:存储和读取核心业务数据(如用户信息、交易记录等)。
如何访问到数据库:

**本地访问(和 MySQL 服务器在同一台 Linux 机器)**走图例里的 socket(本地通信文件),不需要网络端口。直接用 MySQL 客户端命令即可:mysql -u用户名 -p(比如 mysql -uroot -p),默认会通过本地 socket 文件连接到 MySQL 服务器。
**远程访问(外部机器访问 Linux 上的 MySQL)**走图例里的 3306 端口(MySQL 默认网络端口):
先配置 MySQL:授权远程用户(比如 grant all on *.* to '用户名'@'%' identified by '密码';),然后刷新权限 flush privileges;。
再开放 Linux 防火墙的 3306 端口(比如 firewall-cmd --add-port=3306/tcp --permanent 后重启防火墙)。
外部机器用命令连接:mysql -h Linux机器的IP -u用户名 -p -P3306。
2. 常用数据类型
| 类型 | 说明 | 示例 |
|---|---|---|
| INT | 整型,用于存储整数 | id INT |
| FLOAT | 单精度浮点型(4字节),存储小数 | score FLOAT |
| DOUBLE | 双精度浮点型(8字节),精度高于FLOAT | price DOUBLE |
| CHAR(n) | 固定长度字符类型,不足补空格 | name CHAR(10) |
| VARCHAR(n) | 可变长度字符类型,最大支持n个字符 | address VARCHAR(50) |
| TEXT | 文本类型,用于存储长文本 | description TEXT |
| DECIMAL(p,s) | 精确数值类型,p总长度,s小数位数 | salary DECIMAL(5,2) |
注意:CHAR 超出长度时,低版本截取、高版本报错;VARCHAR 仅存储实际长度数据。
3. 文件存储结构
数据目录:/usr/local/mysql/data
存储引擎文件差异:
| 特性 | MyISAM | InnoDB |
|---|---|---|
| 事务支持 | 不支持 | 支持 |
| 外键约束 | 不支持 | 支持 |
| 锁定级别 | 表级锁定 | 行级锁定(全表扫描时为表级锁) |
| 读写并发能力 | 较低(读写相互阻塞) | 较好 |
| 全文索引支持 | 支持 | 5.5 版本后支持 |
| 文件存储 | .MYD(数据)、.MYI(索引)、.frm(结构) | .ibd(表空间)、.frm(结构) |
| 适用场景 | 无需事务、单独写入或查询频繁的场景 | 需要事务、一致性要求高、数据更新频繁的场景 |
4. 版本说明
常用版本:5.7(市场占比高)、8.0(新版本)。
集群要求:组成集群时,所有节点版本必须一致。
二、YUM 安装 MySQL 5.7 部署步骤
1. 环境准备
Bash
# 安装依赖工具
yum install -y yum-utils
# 上传并解压 RPM 依赖包
unzip mysql5720_rpms.zip
# 切换到 RPM 包目录
cd mysql5720_rpms
# 本地安装(自动处理依赖)
yum localinstall -y *.rpm
2. 启动服务与初始配置
Bash
# 启动 MySQL 服务
systemctl start mysqld
# 编辑配置文件(降低密码强度、设置字符集等)
vim /etc/my.cnf
配置文件新增/修改内容:
TOML
[mysqld]
# 密码策略(仅检查长度)
validate_password_policy=LOW
# 最小密码长度
validate_password_length=6
# 服务器端字符集(支持中文/Emoji)
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
[mysql]
# 客户端默认字符集
default-character-set=utf8mb4
[client]
# 客户端连接字符集
default-character-set=utf8mb4
3. 获取初始密码与登录
Bash
# 从错误日志中提取初始密码
grep password /var/log/mysqld.log
# 登录 MySQL(密码含特殊字符需转义)
mysql -uroot -p初始密码

4. 修改密码与验证
SQL
# 修改 root 密码(示例:abc123)
alter user 'root'@'localhost' identified by 'abc123';
# 验证:查看数据库列表
show databases;
# 退出后重新登录验证
exit
mysql -uroot -pabc123
四、SQL语句分类与核心操作
1. SQL语句分类
| 分类 | 功能 | 常用语句 |
|---|---|---|
| DDL(数据定义语言) | 创建/修改/删除数据库对象 | CREATE, DROP, ALTER |
| DML(数据操纵语言) | 增删改表数据 | INSERT, UPDATE, DELETE |
| DQL(数据查询语言) | 查询数据 | SELECT |
| DCL(数据控制语言) | 用户权限管理 | GRANT, REVOKE, COMMIT, ROLLBACK |
2. DDL操作(数据库与表管理)
(1)数据库操作
创建数据库:CREATE DATABASE 数据库名;(示例:CREATE DATABASE szsx_school;)
切换数据库:USE 数据库名;(示例:USE szsx_school;)
删除数据库:DROP DATABASE 数据库名;
(2)表操作
创建表(含约束示例):
SQL
CREATE TABLE demo1 (
id INT NOT NULL, # 非空约束
name CHAR(10) NOT NULL, # 非空约束
score DECIMAL(5,2), # 小数类型(总长度5,2位小数)
passwd CHAR(48) DEFAULT '', # 默认值约束
PRIMARY KEY (id) # 主键约束
);
查看表结构:DESCRIBE 表名;(简写:DESC 表名;)
修改表结构:
-
重命名表:
ALTER TABLE 旧表名 RENAME 新表名; -
添加字段:
ALTER TABLE 表名 ADD 字段名 数据类型 [约束]; -
修改字段:
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 数据类型 [约束]; -
删除字段:
ALTER TABLE 表名 DROP 字段名; -
删除表:
DROP TABLE 表名;(跨库删除:DROP TABLE 数据库名.表名;)
3. DML操作(表数据管理)
插入数据:
SQL
# 指定字段插入
INSERT INTO 表名(字段1,字段2,...) VALUES (值1,值2,...);
# 全字段插入(需按字段顺序)
INSERT INTO 表名 VALUES (值1,值2,...);
更新数据(务必加WHERE条件,避免全表更新):
SQL
UPDATE 表名 SET 字段1=值1[,字段2=值2] WHERE 条件;
删除数据:
SQL
# 带条件删除(可回滚)
DELETE FROM 表名 WHERE 条件;
# 清空表(不可回滚,ID自增重置)
TRUNCATE TABLE 表名;
4. DQL操作(数据查询)
查询所有字段:SELECT * FROM 表名;
指定字段查询:SELECT 字段1,字段2 FROM 表名 WHERE 条件;
限制查询结果:
SQL
SELECT * FROM 表名 LIMIT 2; # 显示前2行
SELECT * FROM 表名 LIMIT 2,3; # 从第2行开始,显示3行
竖向显示结果:SELECT * FROM 表名\G
5. 表高级操作
(1)临时表
创建临时表:CREATE TEMPORARY TABLE 表名 (...);
特性:仅存在于当前连接,连接关闭后自动销毁,支持增删改查操作
(2)克隆表
仅复制表结构:CREATE TABLE 新表 LIKE 旧表;
复制表结构+数据:CREATE TABLE 新表 AS SELECT * FROM 旧表;
五、用户与权限管理
1. 用户管理
创建用户(指定登录地址):
SQL
# 本地登录(仅本机可访问)
CREATE USER '用户名'@'localhost' IDENTIFIED BY '密码';
# 任意IP登录(生产环境慎用)
CREATE USER '用户名'@'%' IDENTIFIED BY '密码';
查看用户:
SQL
USE mysql;
SELECT User, Host, authentication_string FROM user;
修改密码:
SQL
# 修改当前用户密码
SET PASSWORD = PASSWORD('新密码');
# 修改其他用户密码
SET PASSWORD FOR '用户名'@'来源地址' = PASSWORD('新密码');
删除用户:DROP USER '用户名'@'来源地址';
2. 权限管理
(1)授权操作
授权格式(权限列表用逗号分隔):
SQL
GRANT 权限列表 ON 数据库.表 TO '用户名'@'来源地址' IDENTIFIED BY '密码';
示例:
SQL
# 授予查询school库所有表的权限(本地登录)
GRANT SELECT ON school.* TO 'zhangsan'@'localhost' IDENTIFIED BY 'abc123';
# 授予所有数据库所有表的全部权限(任意IP登录)
GRANT ALL PRIVILEGES ON *.* TO 'lisi'@'%' IDENTIFIED BY '123456';
刷新权限(授权后生效):FLUSH PRIVILEGES;
(2)权限查询与撤销
查看用户权限:SHOW GRANTS FOR '用户名'@'来源地址';
撤销权限:
SQL
REVOKE 权限列表 ON 数据库.表 FROM '用户名'@'来源地址';
# 撤销全部权限
REVOKE ALL ON *.* FROM '用户名'@'来源地址';
3. 常用权限说明
| 权限 | 功能描述 |
|---|---|
| SELECT | 查询表数据 |
| INSERT | 插入表数据 |
| UPDATE | 修改表数据 |
| DELETE | 删除表数据 |
| CREATE | 创建数据库/表 |
| DROP | 删除数据库/表 |
| ALTER | 修改表结构 |
| INDEX | 建立索引 |
| ALL PRIVILEGES | 所有权限(管理员常用) |
4. 忘记root密码处理
(1)修改配置文件/etc/my.cnf,在[mysqld]节点添加:skip-grant-tables
(2)重启服务:systemctl restart mysqld
(3)无密码登录:mysql -uroot
(4)修改root密码并刷新权限:
SQL
UPDATE mysql.user SET AUTHENTICATION_STRING=PASSWORD('新密码') WHERE user='root';
FLUSH PRIVILEGES;
(5)删除skip-grant-tables配置,重启MySQL服务即可
六、基础查询操作速查
| 操作需求 | SQL语句 |
|---|---|
| 查看所有数据库 | SHOW DATABASES; |
| 查看当前数据库所有表 | SHOW TABLES; |
| 查看指定数据库的表 | SHOW TABLES IN 数据库名; |
| 查看表结构 | DESCRIBE 表名; 或 DESC 表名; |
| 句 | |
| -------------------- | --------------------------------------- |
| 查看所有数据库 | SHOW DATABASES; |
| 查看当前数据库所有表 | SHOW TABLES; |
| 查看指定数据库的表 | SHOW TABLES IN 数据库名; |
| 查看表结构 | DESCRIBE 表名; 或 DESC 表名; |
| 查看字符集配置 | show variables like 'character_set%'; |