当前位置: 首页 > news >正文

【MySQL 进阶之路】基础语法及优化技巧

MySQL DML 基础语法及优化技巧

一、DML(数据操作语言)概述

DML 是数据库操作语言的子集,用于数据的增、删、改、查四个基本操作。MySQL 中的 DML 操作通常是指以下四种基本操作:

  • INSERT:插入数据
  • SELECT:查询数据
  • UPDATE:更新数据
  • DELETE:删除数据

二、增(INSERT)语法

在 MySQL 中,插入数据的语法使用 INSERT INTO 关键字。

语法:

-- 向表中插入一行数据
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);

示例:

INSERT INTO employees (name, age, position)
VALUES ('Alice', 28, 'Engineer');

如果插入所有列,可以省略列名:

INSERT INTO employees
VALUES (1, 'Alice', 28, 'Engineer');

三、删(DELETE)语法

删除表中的记录使用 DELETE 语句。

语法:

DELETE FROM table_name WHERE condition;

示例:

DELETE FROM employees WHERE name = 'Alice';

如果没有 WHERE 条件,DELETE 会删除表中所有记录。注意: 这种操作是不可恢复的。

四**、改(UPDATE)语法**

更新表中现有的数据使用 UPDATE 语句。

语法:

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

示例:

UPDATE employees
SET position = 'Senior Engineer'
WHERE name = 'Alice';

五、查(SELECT)语法

MySQL 中的查询操作用于从表中检索数据,通常使用 SELECT 语句。

单表查询:

SELECT column1, column2 FROM table_name WHERE condition;

示例:

SELECT name, age FROM employees WHERE position = 'Engineer';

联合查询(联表查询):
联表查询是指从多个表中检索数据,最常见的类型是 内连接(INNER JOIN)外连接(LEFT JOIN, RIGHT JOIN)

内连接(INNER JOIN): 返回两个表中匹配的记录。

SELECT A.name, B.department_name
FROM employees A
INNER JOIN departments B
ON A.department_id = B.id;

左外连接(LEFT JOIN): 返回左表的所有记录,以及右表中匹配的记录。如果右表没有匹配,则返回 NULL。

SELECT A.name, B.department_name
FROM employees A
LEFT JOIN departments B
ON A.department_id = B.id;

右外连接(RIGHT JOIN): 返回右表的所有记录,以及左表中匹配的记录。如果左表没有匹配,则返回 NULL。

SELECT A.name, B.department_name
FROM employees A
RIGHT JOIN departments B
ON A.department_id = B.id;

全外连接(FULL JOIN): 返回两个表的所有记录。如果没有匹配的记录,另一个表会返回 NULL(MySQL 不直接支持 FULL OUTER JOIN,但可以使用 UNION 来模拟)。

六、聚合函数(Aggregation Functions)

MySQL 提供了一些聚合函数来对数据进行汇总处理,常见的聚合函数包括:

  • COUNT:计算记录数
  • SUM:计算和
  • AVG:计算平均值
  • MAX:查找最大值
  • MIN:查找最小值

示例:

SELECT AVG(age) FROM employees WHERE position = 'Engineer';

七、GROUP BY 和 HAVING

GROUP BY 用于将查询结果按某列进行分组,而 HAVING 用于过滤分组后的结果。

示例:

SELECT department_id, COUNT(*) AS num_employees
FROM employees
GROUP BY department_id
HAVING num_employees > 5;
  • WHERE:用于对原始数据进行过滤,应用于 GROUP BY 前。
  • HAVING:用于过滤分组后的结果,应用于 GROUP BY 后。

八、连接优化:

联表查询中,尤其是当数据量大的时候,如何优化查询性能是非常重要的。常见的优化技巧包括:

  1. 使用合适的索引:

    • 索引可以显著提高查询速度,尤其是联表查询时。
    • 确保联接条件(ONWHERE 条件中)涉及的字段有索引。
  2. 小表驱动大表:

    • 在联表查询时,尽量使用小表作为驱动表(外层表),减少查询中涉及大表的扫描次数。
  3. 避免使用 SELECT *:

    • 使用 SELECT * 会返回表中的所有字段,而如果只需要部分字段,应该显式列出。这不仅可以提高查询效率,还能减少内存使用。
    • 示例:
    SELECT name, age FROM employees WHERE position = 'Engineer';
    
  4. 优化连接算法:

    • 嵌套循环连接(Nested Loop Join):这是最常见的连接算法,但性能较低,尤其是当表非常大的时候。
    • 块嵌套循环连接(Block Nested Loop Join):通过缓存小表的数据,减少对大表的多次扫描。
    • 哈希连接(Hash Join):适用于没有索引的连接操作,通过构建哈希表进行连接。
  5. 使用合适的连接类型:

    • 内连接(INNER JOIN):在大多数情况下,使用内连接可以减少返回的结果集,优化查询性能。
    • 外连接(LEFT JOIN, RIGHT JOIN):当需要保留一个表中的所有记录时,使用外连接,尽量避免不必要的外连接。
  6. 避免笛卡尔积:

    • 笛卡尔积发生在没有连接条件时,会返回两个表中所有可能的组合,结果集行数等于两个表行数的乘积,这通常不是我们想要的结果。

九、DML 的事务控制

对于数据库操作中的增、删、改等 DML 操作,MySQL 提供了事务控制,可以确保数据的一致性和完整性。常见的事务控制语句有:

  • BEGIN TRANSACTION:开始一个事务。
  • COMMIT:提交事务,永久保存数据变更。
  • ROLLBACK:回滚事务,撤销事务中的所有操作。

示例:

BEGIN TRANSACTION;UPDATE employees
SET salary = salary * 1.1
WHERE department_id = 2;COMMIT;

结论

熟悉并掌握 MySQL 的 DML 基础语法对于数据库开发至关重要。通过合理运用 INSERTSELECTUPDATEDELETE,以及各种查询优化技巧,可以显著提高数据库的性能和查询效率。在实际开发过程中,合理的索引设计、联表查询优化以及事务管理是提升应用性能和数据一致性的重要手段。


希望这个笔记对你有所帮助!如果你有任何问题或需要进一步探讨某个内容,欢迎随时提问。

相关文章:

【MySQL 进阶之路】基础语法及优化技巧

MySQL DML 基础语法及优化技巧 一、DML(数据操作语言)概述 DML 是数据库操作语言的子集,用于数据的增、删、改、查四个基本操作。MySQL 中的 DML 操作通常是指以下四种基本操作: INSERT:插入数据SELECT:…...

微信小程序做电子签名功能

文章目录 最近需求要做就记录一下。 人狠话不多&#xff0c;直接上功能&#xff1a; 直接搂代码吧,复制过去就可以用&#xff0c;有其他需求自己改吧改吧。 signature.wxml <!-- 电子签名页面 --> <custom-navbar title"电子签名"show-home"{{fals…...

PR的选择与移动

选择工具 可以选择序列上的剪辑&#xff0c;如果需要多选可以按住shift键选中多个剪辑 CtrlA&#xff1a;可以进行全选 编组 选中多个剪辑后“右键-编组“可以将所选的剪辑连接在一起。这时单击任意剪辑都可以选中全部 向前选择轨道工具与向后选择轨道工具 向前选择轨道工具…...

Linux系统 —— 进程系列 - 进程状态 :僵尸与孤儿

目录 1. 进程状态的概念 1.1 课本上的说法&#xff1a;名词提炼 1.2 运行&#xff0c;阻塞和挂起 1.2.1 什么叫做运行状态&#xff08;running&#xff09;&#xff1f; 1.2.2 什么叫做阻塞状态&#xff08;sleeping&#xff09;&#xff1f; 1.2.3 什么叫做挂起状态&…...

linux/centOS7用户和权限管理笔记

linux系列中可以&#xff1a; 配置多个用户配置多个用户组用户可以加入多个用户中 linux中关于权限的管理级别有2个级别&#xff0c;分别是&#xff1a; 针对用户的权限控制针对用户组的权限控制 一&#xff0c;root用户 root用户拥有最大的系统操作权限&#xff0c;而普通…...

使用C#基于ADO.NET编写MySQL的程序

MySQL 是一个领先的开源数据库管理系统。它是一个多用户、多线程的数据库管理系统。MySQL 在网络上特别流行。MySQL 数据库可在大多数重要的操作系统平台上使用。它可在 BSD Unix、Linux、Windows 或 Mac OS 上运行。MySQL 有两个版本&#xff1a;MySQL 服务器系统和 MySQL 嵌入…...

Scala函数的泛型

package hfd //泛型 //需求&#xff1a;你是一个程序员&#xff0c;老板让你写一个函数&#xff0c;用来获取列表中的中间元素 //List(1,2,3,4,5)>中间元素的下标长度/2 >3 //getMiddleEle object Test38_5 {def print1():Unit{println(1)}def print2(): Unit {println(…...

云轴科技ZStack亮相中国生成式AI大会上海站 展现AI Infra新势力

近日&#xff0c;以“智能跃进&#xff0c;创造无限”为主题的2024中国生成式AI大会在上海举办。本次大会由上海市人工智能行业协会指导&#xff0c;智东西、智猩猩共同发起&#xff0c;邀请了人工智能行业的顶尖嘉宾汇聚一堂&#xff0c;以前瞻性视角解构和把脉生成式AI的技术…...

态感知与势感知

“态感知”和“势感知”是两个人机交互中较为深奥的概念&#xff0c;它们虽然都与感知、认知相关&#xff0c;但侧重点不同。下面将从这两个概念的定义、区分以及应用领域进行解释&#xff1a; 1. 态感知 态感知通常指的是对事物当前状态、属性或者内在特征的感知。它强调的是在…...

汽车零部件设计之——发动机曲轴预应力模态分析仿真APP

汽车零部件是汽车工业的基石&#xff0c;是构成车辆的基础元素。一辆汽车通常由上万件零部件组成&#xff0c;包括发动机系统、传动系统、制动系统、电子控制系统等&#xff0c;它们共同确保了汽车的安全、可靠性及高效运行。在汽车产业快速发展的今天&#xff0c;汽车零部件需…...

谷歌浏览器的网页数据导出与导入方法

谷歌浏览器是全球最受欢迎的网络浏览器之一&#xff0c;它不仅提供了快速、安全的浏览体验&#xff0c;还拥有丰富的功能和扩展程序。本文将详细介绍如何在Chrome浏览器中导出和导入网页数据&#xff0c;同时涵盖一些相关的实用技巧&#xff0c;如调试JavaScript、自动填充表单…...

pytroch环境安装-pycharm

环境介绍 安装pycharm 官网下载即可&#xff0c;我这里已经安装&#xff0c;就不演示了 安装anaconda 【官网链接】点击下载 注意这一步选择just me 这一步全部勾上 打开 anaconda Prompt 输入conda create -n pytorch python3.8 命令解释&#xff1a;创建一个叫pytorch&…...

【大模型】PostgreSQL是向量数据库吗

PostgreSQL&#xff08;通常简称为 Postgre&#xff09;本身并不是一个专门的向量数据库&#xff0c;但它可以通过扩展或插件支持向量数据的存储、检索和处理&#xff0c;因此可以在某些场景下作为向量数据库使用。以下是关于 PostgreSQL 是否可以作为向量数据库的详细说明&…...

【PyQt5教程 一】Qt Designer 安装及其使用方法说明,附程序源码

目录 一、PyQt5介绍&#xff1a; &#xff08;1&#xff09;PyQt简介&#xff1a; &#xff08;2&#xff09;PyQt API&#xff1a; &#xff08;3&#xff09;支持的环境&#xff1a; &#xff08;4&#xff09;安装&#xff1a; &#xff08;5&#xff09;配置环境变量…...

Qt 联合Halcon配置

文章目录 配置代码窗口绑定 配置 选择添加库 选择外部库 LIBS -LC:/Program Files/MVTec/HALCON-17.12-Progress/lib/x64-win64/ LIBS -lhalconcpp\-lhdevenginecpp\-lhalconINCLUDEPATH C:/Program Files/MVTec/HALCON-17.12-Progress/include DEPENDPATH C:/Program Fil…...

Vue导出报表功能【动态表头+动态列】

安装依赖包 npm install -S file-saver npm install -S xlsx npm install -D script-loader创建export-excel.vue组件 代码内容如下&#xff08;以element-ui样式代码示例&#xff09;&#xff1a; <template><el-button type"primary" click"Expor…...

C#调用python 程序

需要通过nuget安装ironphthon using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Win…...

day11 性能测试(4)——Jmeter使用(黑马的完结,课程不全)

【没有所谓的运气&#x1f36c;&#xff0c;只有绝对的努力✊】 目录 1、复习 1.1 断言&#xff08;3种&#xff09; 1.2 关联&#xff08;3种&#xff09; 1.3 录制脚本 2、Jmeter直连数据库 2.1 直连数据库——使用场景 2.2 直连数据库——操作步骤 2.2.1 案例1&…...

机器学习详解(4):多层感知机MLP之理论学习

文章目录 1 MLP知识引入1.1 深度学习的发展1.2 神经元(Neuron)1.3 感知机(Perception)1.3.1 介绍1.3.2 感知机在二分类中的应用1.3.2.1 理论1.3.2.2 感知机计算实例 1.3.3 感知机总结 2 MLP(Multilayer Perceptron)2.1 介绍2.2 反向传播2.2.1 实例2.2.2 反向传播计算实例 3 总结…...

【C++】类中的特殊成员——静态成员,友元成员,常量成员

下图为笔者根据自己的理解做的图&#xff0c;仅供参考~ 文章目录 一.静态成员static*类外 1.1静态数据成员1.2静态函数成员*不同属性下的静态成员 1.3局部静态(Local Static) 二.常量成员2.1常量数据成员2.2常量函数成员2.3常量对象 三.友元成员3.1友元函数3.2友元类友元的特…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...