mysql中一些常见名词解析整理

mysql中一些常见名词解析整理

一、索引 (Index)

索引是数据库中帮助快速查找数据的数据结构,类似于书籍的目录。

核心要点

sql 复制代码
-- 创建索引
CREATE INDEX idx_name ON students(name);  -- 普通索引
CREATE UNIQUE INDEX idx_email ON users(email);  -- 唯一索引

-- 索引类型
-- 1. B+树索引(默认):适合范围查询
-- 2. 哈希索引:适合等值查询
-- 3. 全文索引:适合文本搜索
-- 4. 空间索引:适合地理数据

-- 示例:没有索引 vs 有索引
SELECT * FROM users WHERE email = 'test@example.com';
-- 无索引:扫描100万行数据(O(n))
-- 有索引:直接定位到目标行(O(log n))

二、视图 (View)

视图是虚拟表,基于SQL查询的结果集,不实际存储数据。

核心要点

sql 复制代码
-- 创建视图
CREATE VIEW student_summary AS
SELECT 
    s.id,
    s.name,
    AVG(sc.score) as avg_score,
    COUNT(sc.course_id) as course_count
FROM students s
LEFT JOIN scores sc ON s.id = sc.student_id
GROUP BY s.id;

-- 使用视图
SELECT * FROM student_summary WHERE avg_score > 80;

-- 视图特点
-- 1. 简化复杂查询
-- 2. 数据安全性(隐藏敏感字段)
-- 3. 逻辑数据独立性

三、事务 (Transaction)

事务是一组原子性的数据库操作,要么全部成功,要么全部失败。

ACID特性

sql 复制代码
-- 事务示例:转账操作
START TRANSACTION;  -- 开始事务

UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;

-- 如果发生错误
-- ROLLBACK;  -- 回滚事务,撤销所有操作

COMMIT;  -- 提交事务,永久保存

-- ACID解释:
-- A: Atomicity(原子性) - 事务不可分割
-- C: Consistency(一致性) - 数据保持一致状态
-- I: Isolation(隔离性) - 事务间相互隔离
-- D: Durability(持久性) - 事务提交后永久保存

四、连接 (JOIN)

四种基本连接

sql 复制代码
-- 创建示例表
CREATE TABLE A (id INT, name VARCHAR(10));
CREATE TABLE B (id INT, value VARCHAR(10));

-- 1. 内连接 (INNER JOIN) - 只返回匹配的行
SELECT * FROM A 
INNER JOIN B ON A.id = B.id;
-- 结果:A∩B

-- 2. 左连接 (LEFT JOIN) - 返回左表所有行+匹配的右表行
SELECT * FROM A 
LEFT JOIN B ON A.id = B.id;
-- 结果:A的所有行 + 匹配的B

-- 3. 右连接 (RIGHT JOIN) - 返回右表所有行+匹配的左表行
SELECT * FROM A 
RIGHT JOIN B ON A.id = B.id;
-- 结果:B的所有行 + 匹配的A

-- 4. 全外连接 (FULL OUTER JOIN) - MySQL不支持,用UNION模拟
SELECT * FROM A LEFT JOIN B ON A.id = B.id
UNION
SELECT * FROM A RIGHT JOIN B ON A.id = B.id;
-- 结果:A∪B

五、触发器 (Trigger)

触发器是自动执行的存储过程,在特定数据库事件发生时触发。

核心要点

sql 复制代码
-- 创建触发器:插入记录时自动设置创建时间
DELIMITER //
CREATE TRIGGER before_insert_student
BEFORE INSERT ON students
FOR EACH ROW
BEGIN
    SET NEW.created_at = NOW();
    SET NEW.updated_at = NOW();
END //
DELIMITER ;

-- 触发器类型
-- BEFORE INSERT/AFTER INSERT
-- BEFORE UPDATE/AFTER UPDATE
-- BEFORE DELETE/AFTER DELETE

-- 实用场景
-- 1. 自动填充时间戳
-- 2. 数据验证
-- 3. 维护审计日志
-- 4. 同步冗余数据

六、聚合 (Aggregation)

聚合是对一组值执行计算,返回单个值。

常用聚合函数

sql 复制代码
-- 基本聚合
SELECT 
    COUNT(*) as 总人数,          -- 计数
    AVG(score) as 平均分,        -- 平均值
    SUM(score) as 总分,          -- 求和
    MAX(score) as 最高分,        -- 最大值
    MIN(score) as 最低分,        -- 最小值
    STDDEV(score) as 标准差      -- 标准差
FROM scores;

-- 分组聚合
SELECT 
    class_id,
    COUNT(*) as 人数,
    AVG(score) as 平均分
FROM students
GROUP BY class_id;  -- 按班级分组统计

-- HAVING 子句(过滤分组)
SELECT class_id, AVG(score) as 平均分
FROM students
GROUP BY class_id
HAVING AVG(score) > 80;  -- 只显示平均分>80的班级

七、窗口函数 (Window Function)

窗口函数在不减少行数的情况下,对数据集的"窗口"进行计算。

核心要点

sql 复制代码
-- 窗口函数示例
SELECT 
    student_id,
    course_id,
    score,
    -- 排名函数
    ROW_NUMBER() OVER (ORDER BY score DESC) as 行号,
    RANK() OVER (ORDER BY score DESC) as 排名,
    DENSE_RANK() OVER (ORDER BY score DESC) as 密集排名,
    
    -- 聚合窗口函数
    AVG(score) OVER (PARTITION BY course_id) as 课程平均分,
    SUM(score) OVER (ORDER BY student_id) as 累计总分,
    
    -- 前后值
    LAG(score, 1) OVER (ORDER BY student_id) as 上一分数,
    LEAD(score, 1) OVER (ORDER BY student_id) as 下一分数
FROM scores;

-- 窗口函数 vs 聚合函数
-- 聚合函数:多行 → 单行(减少行数)
-- 窗口函数:多行 → 多行(保持行数,添加计算列)

八、分区 (Partitioning)

分区是将大表物理分割成小表,但逻辑上仍是一个表。

分区类型

sql 复制代码
-- 1. RANGE分区(按范围)
CREATE TABLE sales (
    id INT,
    sale_date DATE,
    amount DECIMAL(10,2)
)
PARTITION BY RANGE (YEAR(sale_date)) (
    PARTITION p2020 VALUES LESS THAN (2021),
    PARTITION p2021 VALUES LESS THAN (2022),
    PARTITION p2022 VALUES LESS THAN (2023)
);

-- 2. LIST分区(按列表)
CREATE TABLE employees (
    id INT,
    region VARCHAR(20)
)
PARTITION BY LIST COLUMNS(region) (
    PARTITION p_north VALUES IN ('北京', '天津'),
    PARTITION p_south VALUES IN ('广州', '深圳')
);

-- 3. HASH分区(均匀分布)
CREATE TABLE user_data (
    user_id INT,
    data TEXT
)
PARTITION BY HASH(user_id)
PARTITIONS 4;  -- 分成4个分区

-- 分区优势
-- 1. 提高查询性能(分区裁剪)
-- 2. 方便数据管理(删除旧分区)
-- 3. 提高I/O并行度

九、组复制 (Group Replication)

组复制是MySQL的高可用解决方案,实现多节点数据同步。

核心概念

sql 复制代码
-- 组复制架构
-- 1. 多个MySQL实例组成一个组
-- 2. 数据自动同步到所有节点
-- 3. 支持自动故障转移

-- 配置示例
-- 节点1:主节点
SET GLOBAL group_replication_group_name = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa";
START GROUP_REPLICATION;

-- 节点2:从节点
SET GLOBAL group_replication_group_seeds = "node1:33061,node2:33061";
START GROUP_REPLICATION;

-- 查看组状态
SELECT * FROM performance_schema.replication_group_members;

-- 组复制特点
-- 1. 高可用性:节点故障自动切换
-- 2. 强一致性:保证数据一致性
-- 3. 多主模式:支持多个写入节点

十、审计 (Audit)

审计是跟踪和记录数据库活动,用于安全监控和合规性检查。

实现方式

sql 复制代码
-- 1. 企业版审计插件
INSTALL PLUGIN audit_log SONAME 'audit_log.so';

-- 配置审计日志
SET GLOBAL audit_log_policy = ALL;  -- 记录所有操作

-- 2. 使用通用日志
-- 启用通用查询日志
SET GLOBAL general_log = 'ON';
SET GLOBAL log_output = 'TABLE';  -- 输出到表

-- 查看日志
SELECT * FROM mysql.general_log;

-- 3. 自定义审计表
CREATE TABLE audit_trail (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_name VARCHAR(50),
    action_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    table_name VARCHAR(64),
    action_type ENUM('INSERT', 'UPDATE', 'DELETE'),
    old_values JSON,
    new_values JSON
);

-- 使用触发器实现审计
DELIMITER //
CREATE TRIGGER audit_users_update
AFTER UPDATE ON users
FOR EACH ROW
BEGIN
    INSERT INTO audit_trail (user_name, table_name, action_type, old_values, new_values)
    VALUES (CURRENT_USER(), 'users', 'UPDATE',
            JSON_OBJECT('id', OLD.id, 'email', OLD.email),
            JSON_OBJECT('id', NEW.id, 'email', NEW.email));
END //
DELIMITER ;

-- 审计目的
-- 1. 安全监控:检测异常操作
-- 2. 合规要求:满足法规要求
-- 3. 故障排查:分析问题原因
-- 4. 性能分析:优化查询性能

概念对比表

概念 作用 类比 关键特点
索引 加速数据查找 书籍目录 提高查询性能,增加写开销
视图 简化复杂查询 数据库的"视图" 虚拟表,不存储数据
事务 保证数据一致性 银行转账 ACID特性,原子操作
连接 关联多表数据 表之间的桥梁 四种类型,内/外连接
触发器 自动执行业务逻辑 数据库的"自动响应" 事件驱动,自动执行
聚合 数据统计分析 数据摘要 多行变一行,统计计算
窗口函数 高级数据分析 数据的"滑动窗口" 保持行数,添加计算列
分区 管理大表数据 分柜存放 物理分割,逻辑统一
组复制 高可用集群 数据库集群 多节点同步,故障转移
审计 安全监控跟踪 数据库的"摄像头" 记录操作,安全合规

1. 索引 :数据库的"目录",加快查找速度
2. 视图 :SQL查询的"虚拟表",简化复杂操作
3. 事务 :数据库的"原子操作",保证数据一致
4. 连接 :表之间的"桥梁",关联相关数据
5. 触发器 :数据库的"自动程序",响应数据变化
6. 聚合 :数据的"统计摘要",生成汇总信息
7. 窗口函数 :高级的"数据分析",保持原始行结构
8. 分区 :大表的"分块存储",提高管理效率
9. 组复制 :数据库的"集群方案",确保高可用性
10. 审计:数据库的"监控系统",记录所有操作

相关推荐
逑之17 小时前
C语言笔记8:操作符
c语言·开发语言·笔记
wangbing112517 小时前
平台介绍-开放API后台微服务
数据库·微服务·架构
高一要励志成为佬17 小时前
【数据库】第三章 关系数据库标准语言SQL
数据库·sql
知识分享小能手17 小时前
Ubuntu入门学习教程,从入门到精通,Ubuntu 22.04 中的大数据 —— 知识点详解 (24)
大数据·学习·ubuntu
何中应17 小时前
关于查询方式的总结与讨论
后端·缓存·查询
幽络源小助理17 小时前
逆向工程系统学习资源图谱(2026):从 Windows 内核、安卓安全到游戏协议分析的全栈教程清单
学习·安全·游戏·逆向工程
Larry_Yanan17 小时前
Qt多进程(九)命名管道FIFO
开发语言·c++·qt·学习·ui
Victor35617 小时前
Hibernate(36)Hibernate如何处理多对多关系?
后端
尽兴-17 小时前
MySQL执行UPDATE语句的全流程深度解析
数据库·mysql·innodb·dba·存储引擎·update
ybb_ymm17 小时前
尝试新版idea及免费学习使用
java·学习·intellij-idea