MySQL学习系列(1)-每天学习10个知识

目录

    • [1. SQL 和 MySQL](#1. SQL 和 MySQL)
    • [2. JOIN 类型](#2. JOIN 类型)
    • [3. 索引](#3. 索引)
    • [4. ACID](#4. ACID)
    • [5. 优化MySQL查询性能](#5. 优化MySQL查询性能)
    • [6. 创建MySQL存储过程的步骤](#6. 创建MySQL存储过程的步骤)
    • [7. 范式和反范式设计](#7. 范式和反范式设计)
    • [8. SQL注入](#8. SQL注入)
    • [9. GROUP BY 和 HAVING](#9. GROUP BY 和 HAVING)
    • [10. UNION 和 UNION ALL](#10. UNION 和 UNION ALL)

👍 点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向!

✏️ 评论,你的意见是我进步的财富!


1. SQL 和 MySQL

SQL(Structured Query Language) 是一种用于管理关系数据库系统的标准化查询语言。它允许用户执行诸如查询、插入、更新和删除等操作,以与数据库交互。SQL是一种通用的语言,可以应用于多种数据库系统。

MySQL 是一个流行的开源关系数据库管理系统(RDBMS),它使用SQL作为查询语言。MySQL具有高性能、可靠性和扩展性,被广泛用于Web应用程序和其他各种应用中。

区别:

  • SQL 是一种查询语言,而 MySQL 是一个关系数据库管理系统,它实现了SQL语言规范。
  • SQL是通用的,适用于各种数据库系统,而MySQL是一个具体的数据库产品。
  • MySQL有自己的特性和性能优化策略,而SQL仅仅是一种语言规范。

2. JOIN 类型

在MySQL中,JOIN 用于合并两个或多个表的数据。不同的 JOIN 类型包括:

  • INNER JOIN:返回两个表中匹配行的交集。
sql 复制代码
SELECT customers.name, orders.order_number
FROM customers
INNER JOIN orders ON customers.id = orders.customer_id;
  • LEFT JOIN:返回左表中的所有行和与右表中匹配行的交集。
sql 复制代码
SELECT customers.name, orders.order_number
FROM customers
LEFT JOIN orders ON customers.id = orders.customer_id;
  • RIGHT JOIN:返回右表中的所有行和与左表中匹配行的交集。
sql 复制代码
SELECT customers.name, orders.order_number
FROM customers
RIGHT JOIN orders ON customers.id = orders.customer_id;
  • FULL JOIN:返回左表和右表中的所有行。
sql 复制代码
SELECT customers.name, orders.order_number
FROM customers
FULL JOIN orders ON customers.id = orders.customer_id;

3. 索引

索引是一种数据库对象,用于加速查询操作。在MySQL中,常见的索引类型包括B树索引、哈希索引、全文索引等。

  • B树索引:最常见的索引类型,适用于等值查找和范围查询。它的优势在于适用于各种查询类型,但劣势是对插入和更新操作有一定开销。

  • 哈希索引:适用于精确查找,对于等值查找非常快,但不支持范围查询。它的优势是查找速度快,但劣势是不适用于复杂查询。

  • 全文索引:用于全文搜索,例如在文本数据中查找关键词。它的优势是支持文本搜索,但劣势是占用更多存储空间。

4. ACID

ACID 是数据库事务的属性,代表以下四个特性:

  • 原子性(Atomicity):事务是一个不可分割的工作单元,要么全部执行成功,要么全部失败。

  • 一致性(Consistency):事务使数据库从一个一致状态转移到另一个一致状态,不会破坏数据库完整性约束。

  • 隔离性(Isolation):多个事务同时执行时,它们之间应该相互隔离,不会互相干扰。

  • 持久性(Durability):一旦事务提交,其结果应该持久保存在数据库中,即使系统故障也不会丢失。

ACID确保了数据库在事务处理方面的可靠性和稳定性。

5. 优化MySQL查询性能

要优化MySQL查询性能,可以采取以下措施:

  • 使用合适的索引来加速查询操作。
  • 优化SQL查询语句,确保它们是高效的。
  • 使用查询缓存来减少重复查询的开销。
  • 分区表以减少查询的数据量。
  • 避免使用SELECT *,只选择所需的列。
  • 调整服务器参数,如缓冲区大小和连接池设置。

6. 创建MySQL存储过程的步骤

创建MySQL存储过程的步骤如下:

  1. 使用CREATE PROCEDURE语句定义存储过程名称和参数列表。
sql 复制代码
DELIMITER //
CREATE PROCEDURE sp_example(IN param1 INT, OUT result INT)
BEGIN
    -- 存储过程主体
END;
//
DELIMITER ;
  1. BEGINEND之间编写存储过程的主体,包括SQL语句和逻辑。

  2. 使用OUT参数或SELECT语句设置结果。

  3. 使用DELIMITER定义语句分隔符。

  4. 执行CREATE PROCEDURE语句来创建存储过程。

7. 范式和反范式设计

范式设计是一种数据库设计方法,旨在减少数据冗余并确保数据一致性。主要范式包括第一范式(1NF)、第二范式(2NF)、第三范式(3NF)等。例如,将数据分解成关联的表,以减少数据冗余。

反范式设计是相反的概念,它允许数据冗余以提高查询性能。例如,在一个表中包含冗余数据,以避免频繁的 JOIN 操作。

示例:

  • 范式设计:将订单信息分为订单表和顾客表,以减少冗余。
  • 反范式设计:在订单表中包含顾客信息,以避免 JOIN 操作。

8. SQL注入

SQL注入是一种安全漏洞,

允许攻击者通过恶意构造的输入来执行未经授权的SQL查询或命令。为防止SQL注入,应采取以下措施:

  • 使用参数化查询(Prepared Statements)。
  • 对输入数据进行严格的验证和过滤。
  • 不要将用户输入直接拼接到SQL查询中。
  • 使用数据库访问框架,如ORM(对象关系映射)来自动处理输入验证和防止注入。

9. GROUP BY 和 HAVING

GROUP BY用于将结果集分组,通常与聚合函数(如SUM、COUNT)一起使用,以便对每个组执行计算。

sql 复制代码
SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department;

HAVING用于筛选GROUP BY后的结果集,它允许您对分组后的数据进行过滤。

sql 复制代码
SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 50000;

区别:

  • GROUP BY在分组之前进行筛选和计算。
  • HAVING在分组之后对结果进行筛选。

10. UNION 和 UNION ALL

UNIONUNION ALL都用于合并两个或多个SELECT查询的结果。

  • UNION:合并结果集时会去重,只返回唯一的行。
sql 复制代码
SELECT name FROM table1
UNION
SELECT name FROM table2;
  • UNION ALL:合并结果集时不去重,返回所有行。
sql 复制代码
SELECT name FROM table1
UNION ALL
SELECT name FROM table2;

区别:

  • UNION会去除重复行,性能开销较大。
  • UNION ALL不去重,性能较好,但可能返回重复行。
相关推荐
伏虎山真人11 分钟前
开源数据库 - mysql - mysql-server-8.4(gtid主主同步+ keepalived热切换)部署方案
数据库·mysql·开源
懒惰的bit2 小时前
基础网络安全知识
学习·web安全·1024程序员节
FIN技术铺3 小时前
Redis集群模式之Redis Sentinel vs. Redis Cluster
数据库·redis·sentinel
内核程序员kevin4 小时前
在Linux环境下使用Docker打包和发布.NET程序并配合MySQL部署
linux·mysql·docker·.net
CodingBrother4 小时前
MySQL 中的 `IN`、`EXISTS` 区别与性能分析
数据库·mysql
kayotin4 小时前
Wordpress博客配置2024
linux·mysql·docker
代码小鑫5 小时前
A027-基于Spring Boot的农事管理系统
java·开发语言·数据库·spring boot·后端·毕业设计
Natural_yz5 小时前
大数据学习09之Hive基础
大数据·hive·学习
龙中舞王5 小时前
Unity学习笔记(2):场景绘制
笔记·学习·unity
Natural_yz5 小时前
大数据学习10之Hive高级
大数据·hive·学习