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

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !

我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...