MySQL 知识点总结
MySQL 知识点总结
目录
- MySQL 简介
- 安装与配置
- 数据类型
- SQL 基础
- 4.1 DDL(数据定义语言)
- 4.2 DML(数据操作语言)
- 4.3 DQL(数据查询语言)
- 4.4 DCL(数据控制语言)
- 索引
- 事务与锁
- 存储引擎
- 视图
- 存储过程与函数
- 触发器
- 备份与恢复
- 性能优化
- 安全与权限管理
- 高可用与复制
- 常用工具与客户端
- 常见问题与解决方案
1. MySQL 简介
MySQL 是一个开源的关系型数据库管理系统(RDBMS),由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库之一,广泛应用于 Web 应用程序中,尤其是与 PHP 结合使用的 LAMP(Linux, Apache, MySQL, PHP)架构。
MySQL 支持多用户、多线程,提供了丰富的 API 接口,支持多种编程语言(如 C、C++、Java、Python 等)。MySQL 的主要特点包括:
- 开源免费
- 高性能
- 易于使用
- 支持多种存储引擎
- 良好的兼容性
2. 安装与配置
2.1 安装 MySQL
MySQL 可以在多种操作系统上安装,包括 Linux、Windows 和 macOS。常见的安装方式有:
- Linux: 使用包管理器(如
apt
、yum
)安装。 - Windows: 使用 MySQL Installer 进行安装。
- macOS: 使用 Homebrew 或下载 DMG 文件安装。
2.2 配置 MySQL
MySQL 的配置文件通常是 my.cnf
(Linux)或 my.ini
(Windows)。常见的配置项包括:
- 端口号: 默认是 3306。
- 字符集: 推荐使用
utf8mb4
以支持更多的 Unicode 字符。 - 存储引擎: 默认是 InnoDB。
- 日志文件: 包括错误日志、慢查询日志、二进制日志等。
3. 数据类型
MySQL 支持多种数据类型,主要包括以下几类:
3.1 数值类型
- 整数类型:
TINYINT
,SMALLINT
,MEDIUMINT
,INT
,BIGINT
- 浮点数类型:
FLOAT
,DOUBLE
- 定点数类型:
DECIMAL
3.2 字符串类型
- 定长字符串:
CHAR
- 变长字符串:
VARCHAR
- 二进制字符串:
BINARY
,VARBINARY
- 文本类型:
TEXT
,TINYTEXT
,MEDIUMTEXT
,LONGTEXT
- 枚举类型:
ENUM
- 集合类型:
SET
3.3 日期和时间类型
DATE
: 日期,格式为YYYY-MM-DD
TIME
: 时间,格式为HH:MM:SS
DATETIME
: 日期和时间,格式为YYYY-MM-DD HH:MM:SS
TIMESTAMP
: 时间戳,范围从1970-01-01 00:00:01
UTC 到2038-01-19 03:14:07
UTCYEAR
: 年份,格式为YYYY
3.4 其他类型
JSON
: 用于存储 JSON 格式的数据BLOB
: 用于存储二进制大对象
4. SQL 基础
4.1 DDL(数据定义语言)
DDL 用于定义或修改数据库结构,常见的命令包括:
- 创建数据库:
CREATE DATABASE dbname;
- 删除数据库:
DROP DATABASE dbname;
- 创建表:
CREATE TABLE tablename ( column1 datatype constraints, column2 datatype constraints, ... );
- 修改表:
ALTER TABLE tablename ADD column datatype;
- 删除表:
DROP TABLE tablename;
4.2 DML(数据操作语言)
DML 用于操作表中的数据,常见的命令包括:
- 插入数据:
INSERT INTO tablename (column1, column2, ...) VALUES (value1, value2, ...);
- 更新数据:
UPDATE tablename SET column1 = value1 WHERE condition;
- 删除数据:
DELETE FROM tablename WHERE condition;
4.3 DQL(数据查询语言)
DQL 用于查询数据,最常见的命令是 SELECT
:
SELECT column1, column2, ...
FROM tablename
WHERE condition
ORDER BY column ASC|DESC
LIMIT number;
- 条件查询: 使用
WHERE
子句。 - 排序: 使用
ORDER BY
子句。 - 分组: 使用
GROUP BY
子句。 - 聚合函数:
COUNT()
,SUM()
,AVG()
,MIN()
,MAX()
等。 - 连接查询:
INNER JOIN
,LEFT JOIN
,RIGHT JOIN
,FULL JOIN
等。
4.4 DCL(数据控制语言)
DCL 用于控制数据库的访问权限,常见的命令包括:
- 授权:
GRANT privileges ON dbname.tablename TO 'username'@'host';
- 撤销权限:
REVOKE privileges ON dbname.tablename FROM 'username'@'host';
- 刷新权限:
FLUSH PRIVILEGES;
5. 索引
索引是提高数据库查询性能的重要手段。MySQL 支持多种类型的索引:
- 主键索引: 唯一且非空,每个表只能有一个主键。
- 唯一索引: 确保列中的值唯一。
- 普通索引: 最基本的索引,没有唯一性限制。
- 全文索引: 用于全文搜索,适用于
TEXT
类型的列。 - 组合索引: 多个列组合而成的索引。
创建索引的语法:
CREATE INDEX indexname ON tablename (column1, column2, ...);
6. 事务与锁
6.1 事务
事务是保证数据库操作原子性、一致性、隔离性和持久性(ACID)的机制。MySQL 默认使用自动提交模式,可以通过以下命令手动控制事务:
- 开始事务:
START TRANSACTION;
- 提交事务:
COMMIT;
- 回滚事务:
ROLLBACK;
6.2 锁
MySQL 支持多种锁机制,主要包括:
- 表级锁: 锁定整个表,适用于 MyISAM 存储引擎。
- 行级锁: 锁定单行或多行,适用于 InnoDB 存储引擎。
- 共享锁(S锁): 允许多个事务同时读取同一资源。
- 排他锁(X锁): 只允许一个事务独占资源。
7. 存储引擎
MySQL 支持多种存储引擎,常见的包括:
- InnoDB: 支持事务、行级锁和外键,适用于大多数应用场景。
- MyISAM: 不支持事务和行级锁,适用于读多写少的场景。
- MEMORY: 数据存储在内存中,速度快但数据易丢失。
- ARCHIVE: 适用于存储大量归档数据,支持高压缩比。
查看和修改存储引擎:
SHOW ENGINES; -- 查看支持的存储引擎
ALTER TABLE tablename ENGINE = InnoDB; -- 修改表的存储引擎
8. 视图
视图是基于 SQL 查询结果的虚拟表,可以简化复杂查询并提高安全性。创建视图的语法:
CREATE VIEW viewname AS
SELECT column1, column2, ...
FROM tablename
WHERE condition;
9. 存储过程与函数
9.1 存储过程
存储过程是一组预编译的 SQL 语句,可以接受参数并返回结果。创建存储过程的语法:
CREATE PROCEDURE procedurename (IN param1 datatype, OUT param2 datatype)
BEGIN
-- SQL 语句
END;
9.2 函数
函数与存储过程类似,但必须返回一个值。创建函数的语法:
CREATE FUNCTION functionname (param1 datatype) RETURNS datatype
BEGIN
-- SQL 语句
RETURN value;
END;
10. 触发器
触发器是与表相关的特殊存储过程,在特定事件(如 INSERT
、UPDATE
、DELETE
)发生时自动执行。创建触发器的语法:
CREATE TRIGGER triggername
BEFORE|AFTER INSERT|UPDATE|DELETE ON tablename
FOR EACH ROW
BEGIN
-- SQL 语句
END;
11. 备份与恢复
11.1 备份
MySQL 提供了多种备份方式:
- 物理备份: 直接复制数据库文件,适用于大型数据库。
- 逻辑备份: 使用
mysqldump
工具导出 SQL 语句。mysqldump -u username -p dbname > backup.sql
11.2 恢复
恢复数据库可以使用 mysql
命令:
mysql -u username -p dbname < backup.sql
12. 性能优化
12.1 查询优化
- 使用索引加速查询。
- 避免使用
SELECT *
,只选择需要的列。 - 使用
EXPLAIN
分析查询执行计划。
12.2 数据库设计优化
- 规范化数据库设计,避免冗余数据。
- 使用合适的数据类型,减少存储空间。
- 分区表以提高查询性能。
12.3 配置优化
- 调整
innodb_buffer_pool_size
以提高 InnoDB 性能。 - 启用查询缓存(Query Cache)。
13. 安全与权限管理
13.1 用户管理
- 创建用户:
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
- 删除用户:
DROP USER 'username'@'host';
13.2 权限管理
- 授予权限:
GRANT SELECT, INSERT ON dbname.* TO 'username'@'host';
- 撤销权限:
REVOKE SELECT, INSERT ON dbname.* FROM 'username'@'host';
13.3 数据加密
- 使用 SSL/TLS 加密数据传输。
- 使用
AES_ENCRYPT
和AES_DECRYPT
函数加密敏感数据。
14. 高可用与复制
14.1 主从复制
主从复制是将主数据库的数据同步到一个或多个从数据库的过程。配置步骤:
- 在主服务器上启用二进制日志。
- 在从服务器上配置主服务器的信息。
- 启动从服务器的复制进程。
14.2 高可用方案
- MySQL Cluster: 提供高可用性和自动分片功能。
- Galera Cluster: 基于同步复制的多主集群方案。
15. 常用工具与客户端
15.1 命令行工具
- mysql: MySQL 命令行客户端。
- mysqldump: 数据库备份工具。
- mysqladmin: 数据库管理工具。
15.2 图形化工具
- MySQL Workbench: 官方提供的数据库设计和管理工具。
- phpMyAdmin: 基于 Web 的 MySQL 管理工具。
16. 常见问题与解决方案
16.1 连接问题
- 错误 1045: 用户名或密码错误,检查用户名和密码是否正确。
- 错误 2003: 无法连接到 MySQL 服务器,检查网络连接和防火墙设置。
16.2 性能问题
- 慢查询: 使用
EXPLAIN
分析查询,优化索引和 SQL 语句。 - 锁等待: 检查事务隔离级别,避免长时间持有锁。
16.3 数据一致性问题
- 主从复制延迟: 检查网络带宽和从服务器的负载,优化复制配置。
结语
MySQL 是一个功能强大且灵活的关系型数据库管理系统,适用于各种规模的应用程序。通过掌握 MySQL 的基础知识、性能优化技巧和高可用方案,可以构建高效、可靠的数据库系统。希望本文档能够帮助你全面理解 MySQL 的各个方面,并在实际工作中灵活应用。