当前位置: 首页 > article >正文

MySQL 知识点总结

MySQL 知识点总结

目录

  1. MySQL 简介
  2. 安装与配置
  3. 数据类型
  4. SQL 基础
    • 4.1 DDL(数据定义语言)
    • 4.2 DML(数据操作语言)
    • 4.3 DQL(数据查询语言)
    • 4.4 DCL(数据控制语言)
  5. 索引
  6. 事务与锁
  7. 存储引擎
  8. 视图
  9. 存储过程与函数
  10. 触发器
  11. 备份与恢复
  12. 性能优化
  13. 安全与权限管理
  14. 高可用与复制
  15. 常用工具与客户端
  16. 常见问题与解决方案

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: 使用包管理器(如 aptyum)安装。
  • 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 UTC
  • YEAR: 年份,格式为 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. 触发器

触发器是与表相关的特殊存储过程,在特定事件(如 INSERTUPDATEDELETE)发生时自动执行。创建触发器的语法:

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_ENCRYPTAES_DECRYPT 函数加密敏感数据。

14. 高可用与复制

14.1 主从复制

主从复制是将主数据库的数据同步到一个或多个从数据库的过程。配置步骤:

  1. 在主服务器上启用二进制日志。
  2. 在从服务器上配置主服务器的信息。
  3. 启动从服务器的复制进程。

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 的各个方面,并在实际工作中灵活应用。


http://www.kler.cn/a/549943.html

相关文章:

  • 使用 Playwright 和沙箱模式实现安全的浏览器自动化
  • ⚡️《静电刺客的猎杀手册:芯片世界里的“千伏惊魂“》⚡️
  • 前端面试技巧与实践
  • 深度学习框架探秘|PyTorch:AI 开发的灵动画笔
  • 微信小程序之mobx-miniprogram状态管理
  • mysql中general_log日志详解
  • 数据结构——哈希表使用
  • linux中rpm是什么意思?
  • 【办公类-90-01】】20250213中班周计划四类活动的写法(分散运动、户外游戏、个别化(美工室图书吧探索室))
  • c++中如何区分左值和右值?
  • 面试经典150题——分治
  • 产品经理学习——AI产品
  • 青少年编程与数学 02-009 Django 5 Web 编程 10课题、类视图
  • 鸿蒙Next开发-普通函数和箭头函数 this指向的区别以及对UI刷新的影响
  • vue3实战-----集成sass
  • 宝塔面板开始ssl后,使用域名访问不了后台管理
  • 16-使用QtChart创建动态图表:入门指南
  • C语言中printf()函数,格式输出符
  • Web 后端 HTTP协议
  • Flink在指定时间窗口内统计均值,超过阈值后报警