【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 后。
八、连接优化:
联表查询中,尤其是当数据量大的时候,如何优化查询性能是非常重要的。常见的优化技巧包括:
-
使用合适的索引:
- 索引可以显著提高查询速度,尤其是联表查询时。
- 确保联接条件(
ON
或WHERE
条件中)涉及的字段有索引。
-
小表驱动大表:
- 在联表查询时,尽量使用小表作为驱动表(外层表),减少查询中涉及大表的扫描次数。
-
避免使用 SELECT *:
- 使用
SELECT *
会返回表中的所有字段,而如果只需要部分字段,应该显式列出。这不仅可以提高查询效率,还能减少内存使用。 - 示例:
SELECT name, age FROM employees WHERE position = 'Engineer';
- 使用
-
优化连接算法:
- 嵌套循环连接(Nested Loop Join):这是最常见的连接算法,但性能较低,尤其是当表非常大的时候。
- 块嵌套循环连接(Block Nested Loop Join):通过缓存小表的数据,减少对大表的多次扫描。
- 哈希连接(Hash Join):适用于没有索引的连接操作,通过构建哈希表进行连接。
-
使用合适的连接类型:
- 内连接(INNER JOIN):在大多数情况下,使用内连接可以减少返回的结果集,优化查询性能。
- 外连接(LEFT JOIN, RIGHT JOIN):当需要保留一个表中的所有记录时,使用外连接,尽量避免不必要的外连接。
-
避免笛卡尔积:
- 笛卡尔积发生在没有连接条件时,会返回两个表中所有可能的组合,结果集行数等于两个表行数的乘积,这通常不是我们想要的结果。
九、DML 的事务控制
对于数据库操作中的增、删、改等 DML 操作,MySQL 提供了事务控制,可以确保数据的一致性和完整性。常见的事务控制语句有:
- BEGIN TRANSACTION:开始一个事务。
- COMMIT:提交事务,永久保存数据变更。
- ROLLBACK:回滚事务,撤销事务中的所有操作。
示例:
BEGIN TRANSACTION;UPDATE employees
SET salary = salary * 1.1
WHERE department_id = 2;COMMIT;
结论
熟悉并掌握 MySQL 的 DML 基础语法对于数据库开发至关重要。通过合理运用 INSERT
、SELECT
、UPDATE
、DELETE
,以及各种查询优化技巧,可以显著提高数据库的性能和查询效率。在实际开发过程中,合理的索引设计、联表查询优化以及事务管理是提升应用性能和数据一致性的重要手段。
希望这个笔记对你有所帮助!如果你有任何问题或需要进一步探讨某个内容,欢迎随时提问。
相关文章:
【MySQL 进阶之路】基础语法及优化技巧
MySQL DML 基础语法及优化技巧 一、DML(数据操作语言)概述 DML 是数据库操作语言的子集,用于数据的增、删、改、查四个基本操作。MySQL 中的 DML 操作通常是指以下四种基本操作: INSERT:插入数据SELECT:…...
微信小程序做电子签名功能
文章目录 最近需求要做就记录一下。 人狠话不多,直接上功能: 直接搂代码吧,复制过去就可以用,有其他需求自己改吧改吧。 signature.wxml <!-- 电子签名页面 --> <custom-navbar title"电子签名"show-home"{{fals…...
PR的选择与移动
选择工具 可以选择序列上的剪辑,如果需要多选可以按住shift键选中多个剪辑 CtrlA:可以进行全选 编组 选中多个剪辑后“右键-编组“可以将所选的剪辑连接在一起。这时单击任意剪辑都可以选中全部 向前选择轨道工具与向后选择轨道工具 向前选择轨道工具…...
Linux系统 —— 进程系列 - 进程状态 :僵尸与孤儿
目录 1. 进程状态的概念 1.1 课本上的说法:名词提炼 1.2 运行,阻塞和挂起 1.2.1 什么叫做运行状态(running)? 1.2.2 什么叫做阻塞状态(sleeping)? 1.2.3 什么叫做挂起状态&…...
linux/centOS7用户和权限管理笔记
linux系列中可以: 配置多个用户配置多个用户组用户可以加入多个用户中 linux中关于权限的管理级别有2个级别,分别是: 针对用户的权限控制针对用户组的权限控制 一,root用户 root用户拥有最大的系统操作权限,而普通…...
使用C#基于ADO.NET编写MySQL的程序
MySQL 是一个领先的开源数据库管理系统。它是一个多用户、多线程的数据库管理系统。MySQL 在网络上特别流行。MySQL 数据库可在大多数重要的操作系统平台上使用。它可在 BSD Unix、Linux、Windows 或 Mac OS 上运行。MySQL 有两个版本:MySQL 服务器系统和 MySQL 嵌入…...
Scala函数的泛型
package hfd //泛型 //需求:你是一个程序员,老板让你写一个函数,用来获取列表中的中间元素 //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新势力
近日,以“智能跃进,创造无限”为主题的2024中国生成式AI大会在上海举办。本次大会由上海市人工智能行业协会指导,智东西、智猩猩共同发起,邀请了人工智能行业的顶尖嘉宾汇聚一堂,以前瞻性视角解构和把脉生成式AI的技术…...
态感知与势感知
“态感知”和“势感知”是两个人机交互中较为深奥的概念,它们虽然都与感知、认知相关,但侧重点不同。下面将从这两个概念的定义、区分以及应用领域进行解释: 1. 态感知 态感知通常指的是对事物当前状态、属性或者内在特征的感知。它强调的是在…...
汽车零部件设计之——发动机曲轴预应力模态分析仿真APP
汽车零部件是汽车工业的基石,是构成车辆的基础元素。一辆汽车通常由上万件零部件组成,包括发动机系统、传动系统、制动系统、电子控制系统等,它们共同确保了汽车的安全、可靠性及高效运行。在汽车产业快速发展的今天,汽车零部件需…...
谷歌浏览器的网页数据导出与导入方法
谷歌浏览器是全球最受欢迎的网络浏览器之一,它不仅提供了快速、安全的浏览体验,还拥有丰富的功能和扩展程序。本文将详细介绍如何在Chrome浏览器中导出和导入网页数据,同时涵盖一些相关的实用技巧,如调试JavaScript、自动填充表单…...
pytroch环境安装-pycharm
环境介绍 安装pycharm 官网下载即可,我这里已经安装,就不演示了 安装anaconda 【官网链接】点击下载 注意这一步选择just me 这一步全部勾上 打开 anaconda Prompt 输入conda create -n pytorch python3.8 命令解释:创建一个叫pytorch&…...
【大模型】PostgreSQL是向量数据库吗
PostgreSQL(通常简称为 Postgre)本身并不是一个专门的向量数据库,但它可以通过扩展或插件支持向量数据的存储、检索和处理,因此可以在某些场景下作为向量数据库使用。以下是关于 PostgreSQL 是否可以作为向量数据库的详细说明&…...
【PyQt5教程 一】Qt Designer 安装及其使用方法说明,附程序源码
目录 一、PyQt5介绍: (1)PyQt简介: (2)PyQt API: (3)支持的环境: (4)安装: (5)配置环境变量…...
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组件 代码内容如下(以element-ui样式代码示例): <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使用(黑马的完结,课程不全)
【没有所谓的运气🍬,只有绝对的努力✊】 目录 1、复习 1.1 断言(3种) 1.2 关联(3种) 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++】类中的特殊成员——静态成员,友元成员,常量成员
下图为笔者根据自己的理解做的图,仅供参考~ 文章目录 一.静态成员static*类外 1.1静态数据成员1.2静态函数成员*不同属性下的静态成员 1.3局部静态(Local Static) 二.常量成员2.1常量数据成员2.2常量函数成员2.3常量对象 三.友元成员3.1友元函数3.2友元类友元的特…...
开源 Agent 小屋
知乎:何枝地址:https://zhuanlan.zhihu.com/p/9096314010 Live Demo(网站在进入前可能会加载一段时间,需要等一等) 人物观测:Agent Life Live Demo[1] 行为统计:Agent Life Action Logging Bo…...
Mina之账户模型
为了能真正提升自己的能力,而不是机械低效的Ctrl C / Ctrl V,先从基本概念入手,利用ChatGPT来弄懂Mina。 Mina Mina Protocol 是一种轻量级区块链,被称为“世界上最轻的区块链”。其目标是通过极小的链上数据大小和强大的隐私…...
STM32 ADC 配置
ADC(模数转换器)用于将模拟信号转换为数字信号,以便单片机处理。 模数转换器(Analog-to-Digital Converter, ADC)是电子系统中不可或缺的一部分,它负责将现实世界中的连续物理量,如温度、声音、…...
练9:进制转换
欢迎大家订阅【蓝桥杯Python每日一练】 专栏,开启你的 Python数据结构与算法 学习之旅! 文章目录 1 进制转换2 例题分析 1 进制转换 ①任意制转为十进制 【示例】 ②十进制转为任意制 【法一】 【法二】 2 例题分析 题目地址:https:/…...
善于运用指针--函数与指针
文章目录 前言一、函数的指针二、函数指针运用 1函数名地址2指针变量调用函数3指向函数的指针变量做函数参数二、返回指针值的函数总结 前言 如果在程序中定义了一个函数,在编译时会把函数的源代码转换为可执行代码并分配一段空间。这段空间有一个起始地址…...
Microi吾码低代码平台:前端源码的本地运行探索
文章目录 1.前端源码运行环境要求1.1 操作系统1.2 必备软件工具1.3 项目源码依赖 2.从Git仓库克隆前端源码3.安装项目依赖4.启动本地开发服务器5.常见问题与解决方案5.1 依赖安装失败5.2 端口冲突5.3 代码更新未生效 6.提升本地开发体验的技巧6.1 使用代理解决跨域问题6.2 集成…...
十一、容器化 vs 虚拟化-Docker 使用
文章目录 前言一、Docker Hello World二、Docker 容器使用三、Docker 镜像使用四、Docker 容器连接五、Docker 仓库管理六、Docker Dockerfile七、Docker Compose八、Docker Machine九、Swarm 集群管理 前言 Docker 使用 Docker 容器使用、镜像使用、容器连接、仓库管理、Do…...
实践项目2-自动计价电子秤
自动计价电子秤 一、功能说明 基于AVR单片机设计一自动计价电子秤。根据输入的价格以及检测的重量自动计算总价并打印(串口模拟)。 二、具体要求 1、开机后实时检测重量并显示; 2、通过按键输入并显示价格,具有修改功能&#…...
iOS如何操作更新推送证书
最近收到一份邮件,应该如何操作呢,证书还是跟以前一样冲钥匙串直接申请吗 Hello, As we announced in October, the Certification Authority (CA) for Apple Push Notification service (APNs) is changing. APNs will update the server certificates in sandbox on January…...
WSL2 在vscode无法连接copilot
报错情况: 本机可以使用copilot,但在WSL2上无法连接,报错信息如下: 检查网络情况: ping api.github.com 发现无法连接: github.com:Temporary failure in name resolution 在网上搜集的解决方法&#…...
wordpress开启raid/广告联盟有哪些平台
载着工匠精神和服务意识上路,企业才能驶向更光明的未来自行车为什么不会倒?这是一个隔一段时间就会有人问起的有趣问题。德国明斯特大学的一位教授,最近在一期德国广播节目中给出了解释。他将学骑自行车和幼年学步的平衡性进行对比࿰…...
在腾讯云怎样建设网站/荆州seo推广
本文地址:http://www.cnblogs.com/archimedes/p/c-opensource-project.html,转载请注明源地址。 本篇文章主要总结一些C开源项目,有些是很著名的,有些则比较生僻 1.Webbench Webbench是一个在linux下使用的非常简单的网站压测工具…...
怎么样做游戏网站/搜索图片
💥 项目专栏:【机器学习项目实战案例目录】项目详解 + 完整源码 文章目录 一、支持向量机(SVC)实现乳腺癌肿瘤预测二、数据集介绍三、导包四、加载数据集五、数据处理5.1 数值型特征5.2 离散型特征六、配置流水线七、获取训练数据、测试集八、定义模型九、模型训练十、训练…...
广西高端网站建设公司/百度收录提交工具
1、使用printf应当说是类型不安全的。所以才引入了C的流输入输出。 比如: #include "stdint.h" #include "iostream" using namespace std; int main() { int64_t a 1; int b 2; uint32_t uin 1; printf("%p %p\n", &a, &…...
asp网站怎么改成中英双语/百度查重软件
python基础——错误处理 在程序运行的过程中,如果发生了错误,可以事先约定返回一个错误代码,这样,就可以知道是否有错,以及出错的原因。在操作系统提供的调用中,返回错误码非常常见。比如打开文件的函数ope…...
温州网站建设专业的公司/网络营销企业案例
用OpenInventor实现的NeHe OpenGL教程-第八课这节课我们将在第七节课的基础上增加纹理透明的效果。在OpenGL中,透明效果是通过“融合”(Blend)方式实现的。在NeHe教程中已经对融合的原理做了详细的讨论。这里我们就不再详细讨论了…...