一、数据库(库)管理
| 操作 |
命令 |
| 创建库 |
CREATE DATABASE [IF NOT EXISTS] 库名; |
| 查看所有库 |
SHOW DATABASES; |
| 切换库 |
USE 库名; |
| 查看当前库 |
SELECT DATABASE(); |
| 查看建库语句 |
SHOW CREATE DATABASE 库名; |
| 删除库(高危) |
DROP DATABASE [IF EXISTS] 库名; |
二、数据表(表)管理
2.1 创建表
CREATE TABLE 库名.表名 (
字段1 数据类型 [约束],
字段2 数据类型 [约束],
...
);
2.2 查看表信息
SHOW TABLES; -- 查看当前库所有表
DESC 库名.表名; -- 查看表结构
SHOW CREATE TABLE 库名.表名; -- 查看建表语句
2.3 修改表结构
-- 添加字段
ALTER TABLE 库名.表名 ADD 字段名 类型 [FIRST|AFTER 字段];
-- 修改字段类型
ALTER TABLE 库名.表名 MODIFY 字段名 新类型;
-- 修改字段名(可同时改类型)
ALTER TABLE 库名.表名 CHANGE 旧字段名 新字段名 新类型;
-- 修改表名
ALTER TABLE 库名.旧表名 RENAME TO 库名.新表名;
-- 删除字段
ALTER TABLE 库名.表名 DROP 字段名;
2.4 删除表(保留结构用TRUNCATE)
DROP TABLE 库名.表名; -- 删除表(结构+数据)
TRUNCATE TABLE 库名.表名; -- 清空数据,重置自增,保留结构
三、表记录(数据)操作(DML)
| 操作 |
命令 |
| 插入数据 |
INSERT INTO 库名.表名 [(字段列表)] VALUES (值列表); |
| 更新数据 |
UPDATE 库名.表名 SET 字段=值 WHERE 条件;(务必加WHERE) |
| 删除数据 |
DELETE FROM 库名.表名 WHERE 条件;(务必加WHERE) |
四、查询(SELECT)
4.1 基础查询
SELECT 字段列表 FROM 库名.表名 [WHERE 条件];
* 表示所有字段
- 可用
AS 起别名
DISTINCT 去重
CONCAT(字段1, '分隔', 字段2) 拼接字符串
4.2 常用筛选条件
| 类型 |
示例 |
| 比较 |
WHERE uid > 5、WHERE name = 'root' |
| 空值判断 |
WHERE shell IS [NOT] NULL |
| 范围 |
WHERE uid IN (1,3,5)、WHERE uid BETWEEN 10 AND 30 |
| 模糊匹配 |
WHERE name LIKE 'a%'(%任意多个,_单个) |
| 正则 |
`WHERE name REGEXP '^a |
| 逻辑组合 |
AND、OR、NOT,括号改变优先级 |
4.3 结果处理(排序/分组/分页)
SELECT 字段列表
FROM 库名.表名
[WHERE 条件]
[GROUP BY 分组字段] -- 分组,常配合聚合函数
[HAVING 分组后过滤条件] -- 过滤分组结果,可用聚合函数
[ORDER BY 排序字段 [ASC|DESC]] -- 排序,多字段用逗号分隔
[LIMIT [偏移量,] 行数]; -- 分页,偏移量从0开始
- 执行顺序 :
FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT
4.4 聚合函数(统计)
| 函数 |
作用 |
COUNT(字段) |
统计行数(忽略NULL) |
SUM(字段) |
求和 |
AVG(字段) |
平均值 |
MAX(字段) / MIN(字段) |
最大/最小值 |
4.5 常用内置函数
SELECT VERSION(); -- MySQL版本
SELECT USER(); -- 当前登录用户
SELECT DATABASE(); -- 当前库
五、多表连接查询
5.1 内连接(只保留匹配数据)
SELECT 字段列表
FROM 表1 [AS 别名1]
INNER JOIN 表2 [AS 别名2] ON 连接条件
[INNER JOIN 表3 ON 连接条件 ...]
[WHERE/GROUP BY/HAVING/ORDER BY/LIMIT];
5.2 左外连接(保留左表全部,右表无匹配补NULL)
SELECT ...
FROM 左表 LEFT JOIN 右表 ON 连接条件 ...;
5.3 右外连接(保留右表全部)
SELECT ...
FROM 左表 RIGHT JOIN 右表 ON 连接条件 ...;
MySQL 不支持全外连接,可用 UNION 组合左右连接结果。
5.4 子查询
嵌套在 SELECT、FROM、WHERE、HAVING 后的 SELECT 语句。
六、备份与恢复
6.1 冷备份(物理备份,需停服)
systemctl stop mysqld
cp -r /var/lib/mysql /备份目录/
# 或打包
tar -zcf /备份目录/mysql.tar.gz -C /var/lib/mysql .
# 恢复:解压到 /var/lib/mysql,并 chown -R mysql:mysql /var/lib/mysql
6.2 逻辑备份(mysqldump,服务运行中)
# 备份
mysqldump -u用户 -p'密码' [选项] > /路径/备份.sql
# 常用选项:-A(全库)、-B 库名(单个或多个库)、库名 表名(单表)
# 恢复
mysql -u用户 -p'密码' < /路径/备份.sql
# 恢复单表需指定库名:mysql -u用户 -p'密码' 库名 < 表备份.sql
6.3 增量备份与恢复(Percona XtraBackup)
- 全量备份 :
xtrabackup --backup --target-dir=/全量目录 --datadir=/var/lib/mysql
- 增量备份 :
xtrabackup --backup --target-dir=/增量目录 --incremental-basedir=/基准目录
- 恢复步骤 :先
--prepare --apply-log-only 合并所有增量到全量,再用 --copy-back 拷贝回数据目录。
七、二进制日志(binlog)
| 操作 |
命令/说明 |
| 查看当前日志 |
SHOW MASTER STATUS; |
| 刷新日志(滚动) |
FLUSH LOGS; |
| 重置日志 |
RESET MASTER; |
| 应用binlog恢复 |
`mysqlbinlog 日志文件 |
| 配置参数 |
在 /etc/my.cnf.d/mysql-server.cnf 中设置 log-bin=/路径/前缀、server_id=数字 |
八、主键、外键、索引
8.1 主键(PRIMARY KEY)
- 唯一且非空,一张表只能有一个(可复合)。
- 建表时:
字段名 类型 PRIMARY KEY 或 PRIMARY KEY(字段1,字段2)
- 已有表添加/删除:
ALTER TABLE 表名 ADD PRIMARY KEY (字段);
ALTER TABLE 表名 DROP PRIMARY KEY;
- 自增:
AUTO_INCREMENT 必须配合主键使用。
8.2 外键(FOREIGN KEY)
FOREIGN KEY (从表字段) REFERENCES 主表(主表字段)
ON UPDATE CASCADE ON DELETE CASCADE
SHOW CREATE TABLE 表名;
ALTER TABLE 从表 DROP FOREIGN KEY 外键名;
ALTER TABLE 从表 ADD FOREIGN KEY ... REFERENCES ...;
8.3 索引
- 普通索引:可重复,可为NULL,标志
MUL。
- 创建:
CREATE INDEX 索引名 ON 表名(字段);
- 删除:
DROP INDEX 索引名 ON 表名;
- 查看:
SHOW INDEX FROM 表名;
- 验证是否使用索引:
EXPLAIN SELECT ...;
九、用户与权限管理
9.1 创建用户
CREATE USER 用户名@"客户端地址" IDENTIFIED BY '密码';
客户端地址:%(任意)、192.168.8.%(网段)、192.168.8.51(单IP)、localhost(本机)
9.2 授权
GRANT 权限列表 ON 库名.表名 TO 用户名@"客户端地址";
权限:ALL、USAGE(无权限)、SELECT,INSERT,...;库表范围:*.*、库名.*、库名.表名
9.3 查看权限
SHOW GRANTS FOR 用户名@"客户端地址";
9.4 撤销权限
REVOKE 权限列表 ON 库名.表名 FROM 用户名@"客户端地址";
9.5 修改密码
SET PASSWORD FOR 用户名@"客户端地址" = '新密码';
9.6 删除用户
DROP USER 用户名@"客户端地址";
9.7 查看所有用户
SELECT user,host FROM mysql.user;
十、常用管理操作
| 操作 |
命令 |
| 启动/停止/重启MySQL |
systemctl start/stop/restart mysqld |
| 查看端口监听 |
`ss -nutlp |
| 无密码进入(修复) |
修改配置文件添加 skip-grant-tables,重启后 mysql 直接进入 |
| 更新root密码(有旧密码) |
mysqladmin -uroot -p'旧密码' password '新密码' |
| 导入SQL文件 |
mysql -u用户 -p'密码' < /路径/文件.sql |