MySQL

📚 一、MySQL 基础与 SQL 语言分类

MySQL 是最流行的关系型数据库管理系统(RDBMS)之一,采用 C/S(客户端/服务器)架构,默认端口为 3306。核心操作概括为 CRUD:增(Create)、查(Read)、改(Update)、删(Delete)。

SQL 语言主要分为四大类:

  • DDL (数据定义语言) :用于定义数据库对象(库、表、索引等)。常用指令:CREATEALTERDROP
  • DML (数据操作语言) :用于对表中的数据进行增删改。常用指令:INSERTUPDATEDELETE
  • DQL (数据查询语言) :用于查询数据。常用指令:SELECT
  • DCL (数据控制语言) :用于定义访问权限和安全级别。常用指令:GRANTREVOKE

🛠️ 二、数据库与表的基本操作 (DDL)

1. 数据库操作

  • 创建数据库:CREATE DATABASE IF NOT EXISTS 库名 CHARSET utf8mb4;
  • 删除数据库:DROP DATABASE IF EXISTS 库名;
  • 切换/使用数据库:USE 库名;

2. 数据表操作与约束 创建表时需指定列名、数据类型及约束。常用的核心约束包括:

约束关键字 含义
PRIMARY KEY 主键:唯一、非空,一张表只能有一个
FOREIGN KEY 外键:关联另一张表的主键,维护引用完整性
UNIQUE 唯一约束:字段值不能重复(允许为NULL)
NOT NULL 非空约束:字段不能为空
AUTO_INCREMENT 自增:通常用于主键,数字自动递增
DEFAULT 默认值:插入数据不填该字段时,使用默认值

📝 三、数据增删改查 (DML & DQL)

1. 基础增删改

  • 插入INSERT INTO 表名 (字段1, 字段2) VALUES (值1, 值2);
  • 更新UPDATE 表名 SET 字段1=值1 WHERE 条件;(注意一定要带 WHERE 条件,否则会更新全表)
  • 删除DELETE FROM 表名 WHERE 条件;

2. 单表查询 (DQL)

  • 条件查询 :使用 WHERE 配合比较运算符(=, >, <)、逻辑运算符(AND, OR)、范围(BETWEEN...AND)、模糊查询(LIKE '%关键字%')以及 IS NULL 判断。
  • 排序与分页ORDER BY 字段 [ASC|DESC] 进行排序;LIMIT 起始索引, 查询条数 进行分页。
  • 聚合与分组 :常用聚合函数有 COUNT(), SUM(), AVG(), MAX(), MIN()。配合 GROUP BY 进行分组,分组后的条件过滤需使用 HAVING

3. 多表查询

  • 连接查询 (JOIN)
    • INNER JOIN:内连接,返回两表匹配的行。
    • LEFT JOIN:左外连接,返回左表所有行及右表匹配的行。
    • RIGHT JOIN:右外连接,返回右表所有行及左表匹配的行。
  • 子查询 :在 WHEREFROM 子句中嵌套 SELECT 语句。

⚙️ 四、MySQL 进阶核心原理

1. 存储引擎 MySQL 支持多种存储引擎,最主流的两种对比:

  • InnoDB:支持事务、行级锁、外键,崩溃恢复能力强,适合高并发读写(默认引擎)。
  • MyISAM:不支持事务和外键,只支持表级锁,读取速度较快,适合以查询为主的场景。

2. 索引 (Index) 索引是提升查询性能的关键,底层多采用 B+树 结构。

  • 分类:主键索引(聚簇索引)、普通索引、唯一索引、联合索引。
  • 最左前缀原则:在联合索引中,查询条件必须从索引的最左列开始匹配,否则索引会失效。
  • 索引失效场景 :对索引列进行运算或使用函数、LIKE '%abc' 前导模糊查询、隐式类型转换、使用 OR 且条件中有一列未加索引等。

3. 事务 (Transaction) 事务是一组不可分割的 SQL 操作,具有 ACID 四大特性:

  • 原子性 (Atomicity):要么全部成功,要么全部失败回滚(依赖 Undo Log)。
  • 一致性 (Consistency):事务前后数据总量和状态保持一致。
  • 隔离性 (Isolation):多用户并发访问时互不干扰。
  • 持久性 (Durability):事务提交后,数据永久保存(依赖 Redo Log)。

4. 事务隔离级别 MySQL 默认隔离级别为 可重复读 (REPEATABLE READ)。不同级别解决的问题如下:

  • 读未提交 (READ UNCOMMITTED)
  • 读已提交 (READ COMMITTED):解决脏读。
  • 可重复读 (REPEATABLE READ):解决脏读、不可重复读(通过 MVCC 和间隙锁解决幻读)。
  • 串行化 (SERIALIZABLE):解决所有并发问题,但性能最低。

5. 性能分析与优化

  • 执行计划 :使用 EXPLAIN 关键字分析 SQL 语句,查看是否使用了索引(key 字段)、扫描行数(rows 字段)以及连接类型(type 字段,全表扫描 ALL 性能最差)。
  • 慢查询日志 :开启慢查询日志,定位执行时间超过阈值(如 long_query_time)的 SQL 语句进行针对性优化。

这份笔记涵盖了 MySQL 从入门到进阶的主干知识,建议结合实际的 SQL 练习来加深理解。如果需要针对某个具体知识点(比如 B+树原理或具体的 SQL 调优案例)进行详细展开,随时可以告诉我!

相关推荐
身如柳絮随风扬1 小时前
MySQL 存储引擎深度解析:InnoDB vs MyISAM vs Memory,行锁实现与索引奥秘
数据库·mysql
KaMeidebaby1 小时前
卡梅德生物技术快报|基因测序技术在 46,XY 性发育障碍变异筛查中的流程与数据分析
服务器·前端·数据库·人工智能·算法·数据挖掘·数据分析
AI周红伟1 小时前
长鑫科技存储之王:存储三强对比:三星、SK海力士 vs 长鑫科技
数据库·人工智能·科技·react.js·架构·langchain
灰阳阳2 小时前
MySQL-Innodb-表空间数据组织方式
数据库·mysql·innodb
计算机安禾2 小时前
【算法设计与分析】第29篇:启发式与元启发式搜索方法综述
java·数据库·算法
DIY源码阁2 小时前
JavaSwing学生选课系统 - MySQL版
java·数据库·mysql·eclipse
城管不管2 小时前
Agent——001
android·java·数据库·llm·prompt
AC赳赳老秦2 小时前
OpenClaw批量任务队列优化:解决任务堆积、执行缓慢、优先级混乱问题
java·大数据·数据库·c++·自动化·php·openclaw
J2虾虾2 小时前
Spring AI Alibaba - 工作流(Workflow)
数据库·人工智能·spring