当前位置: 首页 > 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友元类友元的特…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...