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

目录

    • 1. SQL 和 MySQL
    • 2. JOIN 类型
    • 3. 索引
    • 4. ACID
    • 5. 优化MySQL查询性能
    • 6. 创建MySQL存储过程的步骤
    • 7. 范式和反范式设计
    • 8. SQL注入
    • 9. GROUP BY 和 HAVING
    • 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:返回两个表中匹配行的交集。
SELECT customers.name, orders.order_number
FROM customers
INNER JOIN orders ON customers.id = orders.customer_id;
  • LEFT JOIN:返回左表中的所有行和与右表中匹配行的交集。
SELECT customers.name, orders.order_number
FROM customers
LEFT JOIN orders ON customers.id = orders.customer_id;
  • RIGHT JOIN:返回右表中的所有行和与左表中匹配行的交集。
SELECT customers.name, orders.order_number
FROM customers
RIGHT JOIN orders ON customers.id = orders.customer_id;
  • FULL JOIN:返回左表和右表中的所有行。
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语句定义存储过程名称和参数列表。
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)一起使用,以便对每个组执行计算。

SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department;

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

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:合并结果集时会去重,只返回唯一的行。
SELECT name FROM table1
UNION
SELECT name FROM table2;
  • UNION ALL:合并结果集时不去重,返回所有行。
SELECT name FROM table1
UNION ALL
SELECT name FROM table2;

区别:

  • UNION会去除重复行,性能开销较大。
  • UNION ALL不去重,性能较好,但可能返回重复行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/83436.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 性能分析:如何提高 Java 程序的性能

示例示例Java性能分析是指通过对Java程序进行分析,以改善应用程序的性能。它可以帮助开发人员确定程序中的性能瓶颈,并对其进行优化。Java性能分析可以通过多种方式完成,比如使用JVM内置的性能分析工具,如jstat,jmap&a…

ffplay源码解析-main入口函数

main入口函数 初始化 变量、缓存区、SDL窗口初始化等 int main(int argc, char **argv) {int flags;VideoState *is; // av_log_set_level(AV_LOG_TRACE);init_dynload();av_log_set_flags(AV_LOG_SKIP_REPEATED);parse_loglevel(argc, argv, options);/// av_log_set_le…

Hive行转列[一行拆分成多行/一列拆分成多列]

场景: hive有张表armmttxn_tmp,其中有一个字段lot_number,该字段以逗号分隔开多个值,每个值又以冒号来分割料号和数量,如:A3220089:-40,A3220090:-40,A3220091:-40,A3220083:-40,A3220087:-40,A3220086:-4…

深入理解JVM虚拟机第九篇:详细介绍JVM中的双亲委派机制工作原理和机制

文章目录 一:双亲委派机制 1:工作原理 2:代码展示 3:异常代码展示

用Jmeter进行压测详解

简介: 1.概述 一款工具,功能往往是很多的,细枝末节的地方也很多,实际的测试工作中,绝大多数场景会用到的也就是一些核心功能,根本不需要我们事无巨细的去掌握工具的所有功能。所以本文将用带价最小的方式讲…

软路由和硬路由的区别是什么,性价比与可玩性分析

软路由和硬路由是两种不同类型的路由器设备,它们在基本原理、功能、性能和灵活性等方面存在一些区别: 硬件:软路由是基于一台普通的计算机或服务器,通过软件来实现路由器的功能;而硬路由是专门设计的硬件设备&#xff…

Vue前端开发中的输入限制与输入规则探究

前言 在Vue前端开发中,我们经常需要对用户的输入进行限制和规范,以确保数据的准确性和安全性。本文将介绍如何使用Vue的el-input组件来实现输入限制和输入规则,并提供相应的代码示例。 一、输入限制 最大长度限制 我们可以使用maxlength属…

CCC数字钥匙设计【BLE】--URSK管理

1、URSK创建流程 URSK的英文全称为:UWB Ranging Secret Key,即UWB安全测距密钥。 在车主配对时会生成URSK,且在车主配对期间,车辆不得尝试生成第二个URSK。 URSK示例: ed07a80d2beb00f785af2627c96ae7c118504243cb2c3226b3679da…

抖音seo账号矩阵源码系统

1. 开通多个抖音账号,并将它们归纳为一个账号矩阵系统。 2. 建立一个统一的账号管理平台,以便对这些账号进行集中管理,包括账号信息、内容发布、社区交互等。 3. 招募专业的运营团队,对每个账号进行精细化运营,包括内…

CSS 响应式设计:图片

文章目录 图片使用 width 属性使用 max-width 属性网页中添加图片背景图片不同设备显示不同图片HTML5 \<picture> 元素 图片 在CSS中&#xff0c;可以通过以下方法实现响应式设计中的图片处理&#xff1a; 使用 max-width 属性&#xff1a;将图片的最大宽度设置为 100%…

年龄大了转嵌入式有机会吗?

年龄大了转嵌入式有机会吗&#xff1f; 首先&#xff0c;说下结论&#xff1a;年龄并不是限制转行嵌入式软件开发的因素&#xff0c;只要具备一定的编程和电子基础知识&#xff0c;认真学习和实践&#xff0c;是可以成为优秀的嵌入式软件开发工程师的。最近很多小伙伴找我&…

AOSP 13 屏蔽系统的crash和anr弹窗

需求 屏蔽系统的crash和anr弹窗 原理 在frameworks/base/services/core/java/com/android/server/am/AppErrors.java的handleShowAppErrorUi方法中做是否屏蔽判断mSystemConfiguration.hideCrashWindow() , 以及ActivityTaskManagerService.java的mShowDialogs属性 实现 fram…

一、【漏洞复现系列】Tomcat文件上传 (CVE-2017-12615)

1.1、漏洞原理 描述: Tomcat 是一个小型的轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发和调试JSP 程序的首选。 攻击者将有可能可通过精心构造的攻击请求数据包向服务器上传包含任意代码的 JSP 的webshell文件&#x…

Java线上故障排查(CPU、磁盘、内存、网络、GC)+JVM性能调优监控工具+JVM常用参数和命令

CPU/堆/类/线程 根据服务部署和项目架构&#xff0c;从如下几个方面排查&#xff1a; &#xff08;1&#xff09;运用服务器&#xff1a;排查内存&#xff0c;cpu,请求数等&#xff1b; &#xff08;2&#xff09;文件图片服务器&#xff1a;排查内存&#xff0c;cpu,请求数等…

R语言-关于颜色

目录 颜色 示例 R 颜色板 参考&#xff1a; 颜色 什么场景会用到颜色&#xff1f;比如在绘图过程中&#xff0c;为了让图更好看&#xff0c;有的时候&#xff0c;需要选择使用不同的颜色进行绘制或者填充。本文提供了R颜色的相关参数。 在R中&#xff0c;可以通过颜色下标…

摸鱼也摸鱼之点灯游戏自动求解

游戏 变色方块 世上最难智力游戏 (yanhaijing.com) 脚本 新建文件夹&#xff0c;命名为Inverter 在文件夹下新建inverter.js文件&#xff0c;内容如下 "use strict";function getA() {let a [];let level parseInt(document.querySelector("#cur-level&q…

解决 SQLyog 连接 MySQL8.0+ 报错:错误号码2058

文章目录 一、问题现象二、原因分析三、解决方案1. 方案1&#xff1a;更新SQLyog版本2. 方案2&#xff1a;修改用户的授权插件3. 方案3&#xff1a;修复my.cnf 或 my.ini配置文件 四、最后总结 本文将总结如何解决 SQLyog 连接 MySQL8.0 时报错&#xff1a;错误号码2058 一、问…

线程池:神秘的“轻量级线程”

当前我们的多线程部分已经学习了几个代码案例&#xff1a; 1.单例模式 2.阻塞队列 -> 生产者消费者模型 3.定时器 4.线程池 而线程存在的意义就是&#xff0c;使用进程来实现并发编程会“太重了”&#xff0c;创建和销毁进程都会比较耗资源。 但是线程会更加高效。此时&…

K8S名称空间和资源配额

Kubernetes 支持多个虚拟集群&#xff0c;底层依赖于同一个物理集群。 这些虚拟集群被称为名称空间。名称空间namespace是k8s集群级别的资源&#xff0c;可以给不同的用户、租户、环境或项目创建对应的名称空间&#xff0c;例如&#xff0c;可以为test、dev、prod环境分别创建各…

BigDecimal正确使用姿势

文章目录 BigDecimal1.0BigDecimal减法1.1 BigDecimal除法1.2 BigDecimal累加1.3 BigDecimal转为double&#xff0c;并累加Bigdecimal转Double并四舍五入保留两位小数1.4 BigDecimalFormat使用1.5 BigDecimal转为StringBigDecimal转为String展示1.6 小数点处理setScale&#xf…