MySQL 核心知识总结
一、数据库基础
1. 数据分类
-
结构化数据:可通过二维表表达,有固定格式和长度,适用于关系型数据库存储,如用户信息表。
-
半结构化数据:介于结构化与非结构化之间,无严格表结构但含语义标记,例如 HTML、JSON、XML 数据。
-
非结构化数据:无固定结构和长度,无法用二维表呈现,常见类型有音视频文件、二进制文件等。
2. 数据管理发展阶段
| 阶段 | 时间 | 核心特点 |
|---|---|---|
| 人工管理 | 20 世纪 50 年代中期前 | 依赖人工管理,仅支持科学计算,采用批处理方式 |
| 文件系统 | 20 世纪 50 年代后期 - 60 年代中期 | 出现磁盘存储设备,数据可长期保存,支持批处理与联机实时处理 |
| 数据库系统 | 20 世纪 60 年代后期至今 | 高数据独立性、低冗余度,通过 DBMS 统一管理数据 |
3. 核心概念
-
数据库(Database):长期存储在计算机内的有组织、可共享的大量数据集合。
-
数据库管理系统(DBMS):操纵和管理数据库的软件,负责数据库的建立、使用和维护。
-
数据库管理员(DBA):负责数据库全生命周期管理,保障其稳定性、安全性和高可用性。
-
关系型数据库(RDBMS):采用二维表结构组织数据,常见产品有 MySQL、Oracle、SQL Server 等。
二、MySQL 概述
1. 发展历程
-
1995 年首次发布,2008 年被 Sun 收购,2009 年随 Sun 并入 Oracle。
-
核心分支包括 MariaDB(MySQL 之父主导)、Percona Server(兼容 MySQL 并优化性能)。
-
全球 Top20 网站中 90% 使用 MySQL,国内淘宝、百度、腾讯等均有广泛应用。
2. 核心特性
-
开源免费,支持标准 SQL 语言。
-
跨平台运行,支持多编程语言。
-
采用插件式存储引擎(如 InnoDB、MyISAM),可灵活选择。
-
基于单进程多线程模式,提供丰富测试组件和扩展功能。
3. 多实例配置
-
定义:一台服务器运行多个 MySQL 服务进程,每个进程监听独立端口,拥有独立配置和数据。
-
优势:节约硬件资源、便于版本对比测试、集中管理。
-
劣势:存在资源抢占问题,服务器故障会导致所有实例不可用。
三、SQL 语言基础
1. 语言规范
-
不区分大小写,建议关键字大写,库名、表名区分大小写。
-
语句以
;结尾,可单行或多行书写,关键词不可跨行。 -
支持单行注释(
-- 注释内容或# 注释内容)和多行注释(/* 注释内容 */)。
2. 语句分类
| 类型 | 功能 | 核心语句 |
|---|---|---|
| DDL(数据定义语言) | 定义数据库对象 | CREATE、DROP、ALTER |
| DML(数据操纵语言) | 操作表中数据 | INSERT、UPDATE、DELETE |
| DQL(数据查询语言) | 查询数据 | SELECT |
| DCL(数据控制语言) | 控制权限 | GRANT、REVOKE |
| TCL(事务控制语言) | 管理事务 | BEGIN、COMMIT、ROLLBACK |
3. 数据类型
-
数值型:TINYINT、INT、BIGINT、FLOAT、DOUBLE、DECIMAL。
-
日期时间型:DATE、TIME、YEAR、DATETIME、TIMESTAMP。
-
字符串型:CHAR、VARCHAR、TEXT、BLOB、ENUM、SET。
-
其他类型:JSON、空间数据类型(GEOMETRY、POINT 等)。
四、数据库与表操作(DDL)
1. 数据库操作
-- 创建数据库
CREATE DATABASE \[IF NOT EXISTS] 数据库名 \[DEFAULT CHARACTER SET 字符集];
-- 查看数据库
SHOW DATABASES;
-- 修改数据库字符集
ALTER DATABASE 数据库名 CHARACTER SET 字符集;
-- 删除数据库
DROP DATABASE \[IF EXISTS] 数据库名;
2. 表操作
-- 创建表
CREATE TABLE \[IF NOT EXISTS] 表名 (
字段名 数据类型 \[修饰符],
PRIMARY KEY (主键字段)
) \[ENGINE=存储引擎 DEFAULT CHARSET=字符集];
-- 查看表结构
DESC 表名;
-- 修改表(添加字段、修改字段、删除字段)
ALTER TABLE 表名 ADD 字段名 数据类型;
ALTER TABLE 表名 MODIFY 字段名 新数据类型;
ALTER TABLE 表名 DROP 字段名;
-- 删除表
DROP TABLE \[IF EXISTS] 表名;
五、数据操作(DML & DQL)
1. 数据操纵(DML)
-- 插入数据
INSERT INTO 表名 (字段1, 字段2) VALUES (值1, 值2), (值3, 值4);
-- 更新数据(必须加条件,避免全表更新)
UPDATE 表名 SET 字段1=值1 WHERE 条件;
-- 删除数据(逻辑删除推荐用字段标记,如 is\_del=1)
DELETE FROM 表名 WHERE 条件;
-- 清空表(DDL 语句,效率更高)
TRUNCATE TABLE 表名;
2. 数据查询(DQL)
-- 基础查询
SELECT 字段1, 字段2 FROM 表名 WHERE 条件;
-- 去重查询
SELECT DISTINCT 字段 FROM 表名;
-- 排序(ASC 升序,DESC 降序)
SELECT \* FROM 表名 ORDER BY 字段 排序方式;
-- 分页查询(LIMIT 偏移量, 条数)
SELECT \* FROM 表名 LIMIT 0, 10;
-- 分组统计(配合聚合函数)
SELECT 分组字段, COUNT(\*) FROM 表名 GROUP BY 分组字段 HAVING 过滤条件;
六、用户与权限管理
1. 用户操作
-- 创建用户
CREATE USER '用户名'@'主机' IDENTIFIED BY '密码';
-- 修改密码
ALTER USER '用户名'@'主机' IDENTIFIED BY '新密码';
-- 删除用户
DROP USER '用户名'@'主机';
2. 权限控制
-
权限级别:管理类(CREATE USER、SHUTDOWN)、库表级(CREATE、SELECT、UPDATE)、字段级(SELECT (字段))。
-
授权语句:
GRANT 权限 ON 数据库.表 TO '用户'@'主机' [WITH GRANT OPTION]; -
撤销权限:
REVOKE 权限 ON 数据库.表 FROM '用户'@'主机'; -
查看权限:
SHOW GRANTS FOR '用户'@'主机';
七、备份与恢复
1. 备份分类
-
物理冷备:关闭数据库后打包数据文件,备份恢复速度快。
-
逻辑备份:通过 mysqldump 备份库表结构和数据,适用于跨版本迁移。
-
增量备份:基于二进制日志,备份两次全备之间的变更数据。
2. 核心命令
-- 逻辑备份(备份单个数据库)
mysqldump -u 用户名 -p 数据库名 > 备份文件.sql;
-- 备份所有数据库
mysqldump -u 用户名 -p --all-databases > 全量备份.sql;
-- 恢复数据
mysql -u 用户名 -p 数据库名 < 备份文件.sql;
-- 增量备份(刷新二进制日志)
mysqladmin -u 用户名 -p flush-logs;
八、高可用架构
1. 主从复制
-
原理:主库写入二进制日志,从库通过 I/O 线程读取日志并写入中继日志,SQL 线程重放日志实现数据同步。
-
作用:数据冗余、灾难恢复、分担读负载。
-
配置步骤:主库开启二进制日志、创建复制用户;从库配置 server-id、指定主库信息并启动复制。
2. 读写分离
-
架构:主库处理写操作,从库处理读操作,通过中间件(Amoeba、MySQL-Proxy)实现请求分发。
-
优势:提升并发处理能力,避免读写锁冲突。
3. MHA 高可用
-
组成:MHA Manager(管理节点)和 MHA Node(数据节点)。
-
特性:主库故障时 0-30 秒自动切换,最大程度保障数据不丢失。
-
适用场景:一主多从架构,支持自动故障转移和手动主从切换。
九、实战应用
1. LAMP 架构部署
-
组成:Linux + Apache + MySQL + PHP。
-
应用:搭建 WordPress 博客、电商网站等动态应用。
-
核心步骤:安装配置 Apache 和 PHP、创建 MySQL 数据库和用户、部署应用程序并配置连接。
2. 数据导出
- 利用 Python + pandas + pymysql 可将 MySQL 数据导出为 Excel 格式,便于数据分析。