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不去重,性能较好,但可能返回重复行。
相关推荐
Chef_Chen5 分钟前
从0开始学习R语言--Day64--决策树回归
学习·决策树·r语言
zc.z41 分钟前
Tomcat线程池、业务线程池与数据库连接池的层级约束关系解析及配置优化
服务器·数据库·tomcat
Aplis43 分钟前
ETCD学习之路
数据库·学习·etcd
拷斤锟1 小时前
使用Excel解析从OData API获取到的JSON数据
数据库·json·excel
翔云1234561 小时前
MySQL 高并发下如何保证事务提交的绝对顺序?
数据库·mysql
叁沐1 小时前
MySQL 23 MySQL是怎么保证数据不丢的?
mysql
知识分享小能手1 小时前
Vue3 学习教程,从入门到精通,Vue3 中使用 Axios 进行 Ajax 请求的语法知识点与案例代码(23)
前端·javascript·vue.js·学习·ajax·vue·vue3
正在走向自律1 小时前
X2Doris是SelectDB可视化数据迁移工具,安装与部署&使用手册,轻松进行大数据迁移
数据库·数据迁移·selectdb·x2doris·数据库迁移工具
tuokuac1 小时前
SQL中的LEFT JOIN
数据库·sql
tuokuac1 小时前
SQL中的GROUP BY用法
数据库·sql