SQL进阶知识:六、动态SQL
今天介绍下关于动态SQL的详细介绍,并结合MySQL数据库提供实际例子。
动态SQL是指在运行时动态构建和执行SQL语句的技术。这种技术在处理复杂的查询逻辑、参数化查询或在某些情况下需要根据用户输入动态调整查询时非常有用。MySQL支持动态SQL,主要通过PREPARE
、EXECUTE
和DEALLOCATE PREPARE
语句来实现。
以下是关于动态SQL的详细介绍,以及基于MySQL的实际例子。
一、动态SQL的基本概念
1. 动态SQL的作用
动态SQL允许在运行时构建SQL语句,而不是在编写代码时静态定义。这使得SQL语句可以根据用户输入、配置文件或运行时条件进行调整,从而提供更高的灵活性。
2. 动态SQL的优缺点
-
优点:
- 灵活性:可以根据用户输入或运行时条件动态调整SQL语句。
- 减少硬编码:避免在代码中硬编码SQL语句,提高代码的可维护性。
- 动态查询:可以构建复杂的查询逻辑,适应不同的查询需求。
-
缺点:
- 性能开销:动态SQL的构建和执行可能比静态SQL稍慢。
- 安全性问题:如果处理不当,可能会导致SQL注入攻击。
- 调试困难:动态构建的SQL语句在调试时可能不如静态SQL直观。
3. 动态SQL的关键语句
MySQL中实现动态SQL的关键语句包括:
- PREPARE:准备SQL语句。
- EXECUTE:执行准备好的SQL语句。
- DEALLOCATE PREPARE:释放准备好的SQL语句。
二、动态SQL的实际例子
示例1:根据用户输入动态构建查询
场景:根据用户输入的条件动态查询用户信息
假设有一个users
表,记录用户的个人信息:
CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(100),email VARCHAR(100),age INT
);
-- 定义变量
SET @name = 'Alice';
SET @email = 'alice@example.com';-- 动态构建SQL语句
SET @sql = 'SELECT * FROM users WHERE 1=1';
IF @name IS NOT NULL THENSET @sql = CONCAT(@sql, ' AND name = ''', @name, '''');
END IF;
IF @email IS NOT NULL THENSET @sql = CONCAT(@sql, ' AND email = ''', @email, '''');
END IF;-- 准备SQL语句
PREPARE stmt FROM @sql;-- 执行SQL语句
EXECUTE stmt;-- 释放SQL语句
DEALLOCATE PREPARE stmt;
解释:
- 使用
SET
语句定义用户输入的条件。 - 动态构建SQL语句,根据用户输入的条件动态添加
WHERE
子句。 - 使用
PREPARE
语句准备SQL语句。 - 使用
EXECUTE
语句执行SQL语句。 - 使用
DEALLOCATE PREPARE
语句释放SQL语句。
示例2:动态构建和执行插入语句
场景:根据用户输入动态插入数据
-- 定义变量
SET @name = 'Bob';
SET @email = 'bob@example.com';
SET @age = 30;-- 动态构建SQL语句
SET @sql = 'INSERT INTO users (name, email, age) VALUES (?, ?, ?)';-- 准备SQL语句
PREPARE stmt FROM @sql;-- 执行SQL语句
SET @name = 'Bob';
SET @email = 'bob@example.com';
SET @age = 30;
EXECUTE stmt USING @name, @email, @age;-- 释放SQL语句
DEALLOCATE PREPARE stmt;
解释:
- 使用
SET
语句定义用户输入的数据。 - 动态构建SQL语句,使用
?
作为占位符。 - 使用
PREPARE
语句准备SQL语句。 - 使用
EXECUTE
语句执行SQL语句,通过USING
子句传递参数。 - 使用
DEALLOCATE PREPARE
语句释放SQL语句。
示例3:动态构建和执行更新语句
场景:根据用户输入动态更新用户信息
-- 定义变量
SET @id = 1;
SET @name = 'Alice';
SET @email = 'alice_new@example.com';-- 动态构建SQL语句
SET @sql = 'UPDATE users SET ';
SET @set_clause = '';
IF @name IS NOT NULL THENSET @set_clause = CONCAT(@set_clause, 'name = ''', @name, '''');
END IF;
IF @email IS NOT NULL THENIF @set_clause <> '' THENSET @set_clause = CONCAT(@set_clause, ', ');END IF;SET @set_clause = CONCAT(@set_clause, 'email = ''', @email, '''');
END IF;
SET @sql = CONCAT(@sql, @set_clause, ' WHERE id = ', @id);-- 准备SQL语句
PREPARE stmt FROM @sql;-- 执行SQL语句
EXECUTE stmt;-- 释放SQL语句
DEALLOCATE PREPARE stmt;
解释:
- 使用
SET
语句定义用户输入的条件和更新的值。 - 动态构建SQL语句,根据用户输入的条件动态添加
SET
子句。 - 使用
PREPARE
语句准备SQL语句。 - 使用
EXECUTE
语句执行SQL语句。 - 使用
DEALLOCATE PREPARE
语句释放SQL语句。
示例4:动态构建和执行删除语句
场景:根据用户输入动态删除用户
-- 定义变量
SET @id = 1;-- 动态构建SQL语句
SET @sql = 'DELETE FROM users WHERE id = ?';-- 准备SQL语句
PREPARE stmt FROM @sql;-- 执行SQL语句
SET @id = 1;
EXECUTE stmt USING @id;-- 释放SQL语句
DEALLOCATE PREPARE stmt;
解释:
- 使用
SET
语句定义用户输入的条件。 - 动态构建SQL语句,使用
?
作为占位符。 - 使用
PREPARE
语句准备SQL语句。 - 使用
EXECUTE
语句执行SQL语句,通过USING
子句传递参数。 - 使用
DEALLOCATE PREPARE
语句释放SQL语句。
三、总结
动态SQL是MySQL中一个强大的功能,允许在运行时动态构建和执行SQL语句。通过PREPARE
、EXECUTE
和DEALLOCATE PREPARE
语句,可以实现灵活的查询逻辑,适应不同的运行时条件。然而,动态SQL也需要注意安全性问题,特别是防止SQL注入攻击。通过合理使用动态SQL,可以显著提升数据库操作的灵活性和可维护性。
以上就是基于Mysql,有关的进阶知识,希望对你有所帮助~
后续会连续发布多篇SQL进阶相关内容;
期待你的关注,学习更多知识;
相关文章:
SQL进阶知识:六、动态SQL
今天介绍下关于动态SQL的详细介绍,并结合MySQL数据库提供实际例子。 动态SQL是指在运行时动态构建和执行SQL语句的技术。这种技术在处理复杂的查询逻辑、参数化查询或在某些情况下需要根据用户输入动态调整查询时非常有用。MySQL支持动态SQL,主要通过PRE…...
Spring Boot常用注解详解:实例与核心概念
Spring Boot常用注解详解:实例与核心概念 前言 Spring Boot作为Java领域最受欢迎的快速开发框架,其核心特性之一是通过注解(Annotation)简化配置,提高开发效率。注解驱动开发模式让开发者告别繁琐的XML配置ÿ…...
java 富文本转pdf
前言: 本文的目的是将传入的富文本内容(html标签,图片)并且分页导出为pdf。 所用的核心依赖为iText7。 因为itextpdf-core的核心包在maven中央仓库中,阿里云华为云等拉不下来,中央仓库在外网,并且此包在中央仓库中未…...
17.第二阶段x64游戏实战-人工遍历二叉树结构
免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 上一个内容:16.第二阶段x64游戏实战-分析二叉树结构 上一个内容里把二叉树的结构写了写&am…...
C#基于Sunnyui框架和MVC模式实现用户登录管理
C#基于Sunnyui框架和MVC模式实现用户登录管理 1 Controller1.1 UserManagementController.cs(控制器入口) 2 Model2.1 UserRepository.cs(用户管理模型)2.2 User.cs(用户结构体)2.3 SQLiteHelper.cs&#x…...
Spring Boot实战(三十六)编写单元测试
目录 一、什么是单元测试?二、Spring Boot 中的单元测试依赖三、举例 Spring Boot 中不同层次的单元测试3.1 Service层3.2 Controller 层3.3 Repository层 四、Spring Boot 中 Mock、Spy 对象的使用4.1 使用Mock对象的背景4.2 什么是Mock对象,有哪些好处…...
声音分离人声和配乐-从头设计数字生命第4课——仙盟创梦IDE
音频分离在数字人中具有多方面的重要作用,主要体现在以下几个方面: 提高语音合成质量:通过音频分离,可以将原始音频中的语音部分与其他背景噪音或干扰声音分离开来。这样在进行语音合成时,能够获得更纯净的语音信号&am…...
http协议、全站https
一、http协议 1、为何要学http协议? 用户用浏览器访问网页,默认走的都是http协议,所以要深入研究web层,必须掌握http协议 2、什么是http协议 1、全称Hyper Text Transfer Protocol(超文本传输协议) ### 一个请求得到一个响应包 普通…...
Mediamtx与FFmpeg远程与本地推拉流使用
1.本地推拉流 启服 推流 ffmpeg -re -stream_loop -1 -i ./DJI_0463.MP4 -s 1280x720 -an -c:v h264 -b:v 2000k -maxrate 2500k -minrate 1500k -bufsize 3000k -rtsp_transport tcp -f rtsp rtsp://127.0.0.1:8554/stream 拉流 ffplay -rtsp_transport tcp rtsp://43.136.…...
css3新特性第七章(3D变换)
css新特性第七章(3D变换) 一、3d空间和景深 元素进行 3D 变换的首要操作:父元素必须开启 3D 空间! 使用 transform-style 开启 3D 空间,可选值如下: flat : 让子元素位于此元素的二维平面内( 2D 空间&…...
redis经典问题
1.缓存雪崩 指缓存同一时间大面积的失效,所以,后面的请求都会落到数据库上,造成数据库短时间内承受大量请求而崩掉。 解决方案: 1)Redis 高可用,主从哨兵,Redis cluster,避免全盘崩…...
数据仓库是什么?数据仓库架构有哪些?
目录 数据仓库是什么?数据仓库架构有哪些? 一、数据仓库是什么? 二、数据仓库的架构分层 1. 获取层 2. 数据层 3. 应用层 4. 访问层 三、数据仓库的价值体现 1.决策支持 2.业务优化 3.提升竞争力 四、数据仓库的未来发展趋势 总…...
Nginx 通过 Let‘s Encrypt 实现 HTTPS 访问全流程指南
一、Let’s Encrypt 与 Certbot 简介 Let’s Encrypt 是由非营利组织 ISRG 运营的免费证书颁发机构(CA),旨在推动 HTTPS 的普及。其核心工具 Certbot 能自动化完成证书申请、部署与续期,大幅降低 HTTPS 的配置复杂度。通过 Certb…...
网络知识:路由器静态路由与动态路由介绍
目录 一、静态路由 1.1 什么是静态路由? 1.2 静态路由的好处 1.3 静态路由的局限 1.4 静态路由应用场景 微型办公室网络 性能要求高业务流量 安全性要求高的环境 二、动态路由 2.1 什么是动态路由? 2.2 动态路由的好处 2.3 动态路由的局限 2.4 动态路由的应用场…...
LLaMA3微调全流程:从LoRA到QLoRA,7B参数模型推理速度提升4倍的代码实战
LLaMA3微调全流程:从LoRA到QLoRA,7B参数模型推理速度提升4倍的代码实战 发现了一个巨牛的人工智能学习网站,分享一下给大家!https://www.captainbed.cn/ccc 前言 在大模型时代,LLaMA系列作为开源社区的明星模型&#…...
日内组合策略思路
一、策略概述 本策略是一种针对日内交易设计的策略,其核心在于通过识别市场趋势和突破信号,结合动态止损和止盈机制,实现日内交易的盈利。策略以金字塔式的加仓方式控制风险,并通过灵活的平仓策略锁定收益。 二、交易逻辑思路 市场…...
从空气污染监测到嵌入式仿真教学:基于STM32与MQ135的实践探索
一、嵌入式系统在环境监测中的技术演进 随着全球城市化进程加速,世界卫生组织(WHO)数据显示,92%的人口长期暴露于超标PM2.5环境中。在此背景下,基于STM32微控制器的智能监测系统因其高性价比(单节点成本低…...
【数据结构】Map与Set结构详解
数据结构系列五:Map与Set(一) 一、接口的实现 1.方法上 2.成员上 二、Map的内外双接口结构 1.实现 1.1外部Map接口的实现 1.1.1临摹整体 1.1.2外部类实现整体 1.2内部Entry接口的实现 1.2.1临摹内部 1.2.2内部类实现内部 2.关系 3.意义 3.1逻辑内聚 …...
银河麒麟(内核CentOS8)安装rbenv、ruby2.6.5和rails5.2.6
一、安装 rbenv 和 ruby-build 1.安装 rbenv git clone https://github.com/rbenv/rbenv.git ~/.rbenv 2. 添加 rbenv 到 PATH echo export PATH"$HOME/.rbenv/bin:$PATH" >> ~/.bashrc echo eval "$(rbenv init -)" >> ~/.bashrc source ~…...
豆包桌面版 1.47.4 可做浏览器,免安装绿色版
自己动手升级更新办法: 下载新版本后安装,把 C:\Users\用户名\AppData\Local\Doubao\Application 文件夹的文件,拷贝替换 DoubaoPortable\App\Doubao 文件夹的文件,就升级成功了。 再把安装的豆包彻底卸载就可以。 桌面版比网页版…...
Linux 命令行与 vi/vim 编辑器完全指南
一、Linux 命令行基础 (一)命令与命令行简介 命令:Linux 系统内置的操作指令,以字符化形式使用,用于指示系统执行特定任务。 命令行(终端):提供字符化的操作界面,用户通…...
海量聊天消息处理:ShardingJDBC分库分表、ClickHouse冷热数据分离、ES复合查询方案、Flink实时计算与SpringCloud集成
海量聊天消息处理:ShardingJDBC分库分表、ClickHouse冷热数据分离、ES复合查询方案、Flink实时计算与SpringCloud集成 一、背景介绍 每天有2000万条聊天消息,一年下来几千万亿海量数据。为应对这种规模的数据存储和处理需求,本文将从以下几…...
金融系统上云之路:云原生后端架构在金融行业的演化与实践
📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:为什么金融行业也要“云原生”? 金融行业素来以“安全第一、稳定优先”著称,面对每日亿级交易请求、秒级风控响应、PB级数据处理,系统稳定性和性能要求极高。长期以来,大型金融机构往…...
每日c/c++题 备战蓝桥杯 ([洛谷 P1226] 快速幂求模题解)
[洛谷 P1226] 快速幂求模题解 📌 题目链接 https://www.luogu.com.cn/problem/P1226 📝 题目描述 给定正整数 a、b 和质数 p,要求计算: a^b % p其中: 1 ≤ a ≤ 10^90 ≤ b ≤ 10^92 ≤ p ≤ 10^9 💡…...
深度学习小记(包括pytorch 还有一些神经网络架构)
这个是用来增加深度学习的知识面或者就是记录一些常用的命令,会不断的更新 import torchvision.transforms as transforms toPIL transforms.ToPILImage()#可以把tensor转换为Image类型的 imgtoPIL(img) #利用save就可以保存下来 img.save("/opt/data/private/stable_si…...
Spring Boot默认缓存管理
Spring框架支持透明地向应用程序添加缓存,以及对缓存进行管理,其管理缓存的核心是将缓存应用于操作数据的方法,从而减少操作数据的执行次数,同时不会对程序本身造成任何干扰。Spring Boot继承了Spring框架的缓存管理功能ÿ…...
倚光科技:微透镜阵列低成本加工新范式
在光通信、机器视觉、生物医学成像等前沿领域,微透镜阵列凭借其独特的光学特性成为不可或缺的核心部件。然而,传统加工方式往往面临成本高、效率低、精度难控等困境。倚光科技深耕光学加工领域多年,创新运用单点金刚石车床技术,成…...
Vue+Flask豆瓣LSTM影评+推荐算法大数据可视化平台深度学习系统源码
文章结尾部分有CSDN官方提供的学长 联系方式名片 文章结尾部分有CSDN官方提供的学长 联系方式名片 关注B站,有好处! 编号: F011 视频介绍 VueFlask豆瓣LSTM影评推荐算法大数据可视化平台深度学习系统源码(2023重制) 1…...
【MySQL】基本查询
目录 增加 查询 基本查询 where子句 结果排序 筛选分页结果 修改(更新) 删除 普通删除 截断表 插入查询结果 聚合函数 分组查询 这一节的内容是对表内容的增删查改,其中重点是表的查询 增加 语法: INSERT [INTO] table_name [(column [, …...
hive默认的建表格式
在 Hive 中创建表时,默认的建表语法格式如下: CREATE TABLE table_name (column1_type,column2_type,... ) ROW FORMAT DELIMITED FIELDS TERMINATED BY , STORED AS TEXTFILE;在这个语法中: CREATE TABLE table_name:指定要创建…...
配置RSUniVLM环境(自用)
首先git clone这个仓库,但是好像不太行,就直接下载下来吧 创个容器弄,容器里需要conda gpu 镜像的话 在dockerhub找到了一个:docker pull vkashyap10/llava-next 下载在了 ssh root10.12.107.240 amos123 这个机器上。等会看…...
产品经理对于电商接口的梳理||电商接口文档梳理与接入
接口梳理7个注意点总结 ①注意要测试环境和生产环境。生产上线时候要提醒研发换到生产环境调用。 ②注意必输字段和选输字段,要传入字段的含义和校验。枚举值不清楚含义的要询问对方含义,比如说单据类型字段枚举值是B2C发货单,BBC发货单&am…...
深入探索Spark-Streaming:从Kafka数据源创建DStream
在大数据处理领域,Spark-Streaming是一个强大的实时流处理框架,而Kafka作为高性能的分布式消息队列,二者结合能实现高效的数据处理。今天就来聊聊Spark-Streaming中从Kafka数据源创建DStream的相关知识。 早期,Spark-Streaming通过…...
R 语言科研绘图第 41 期 --- 桑基图-基础
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...
基于STM32的汽车主门电动窗开关系统设计方案
芯片和功能模块选型 主控芯片 STM32F103C8T6:基于 ARM Cortex - M3 内核,有丰富的 GPIO 接口用于连接各类外设,具备 ADC 模块可用于电流检测,还有 CAN 控制器方便实现 CAN 总线通信。它资源丰富、成本低,适合学生进行 DIY 项目开发。按键模块 轻触按键:用于控制车窗的自…...
Spring Boot 配置处理器深度解析:元数据驱动的工程实践
Spring Boot 配置处理器深度解析:元数据驱动的工程实践 引言:为什么关注配置处理器? 在 Spring Boot 中,spring-boot-configuration-processor 是支撑“配置即文档”“配置即代码”的基础设施。它通过编译期生成结构化的配置元数…...
深入详解人工智能数学基础——概率论中的贝叶斯深度学习
🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C++, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C++、C#等开发语言,熟悉Java常用开发技术,能熟练应用常用数据库SQL server,Oracle,mysql,postgresql等进行开发应用…...
Bandizip解压缩软件 v7.37 正式版解锁专业版
软件介绍 Bandizip 是一款专业的解压缩软件,号称解压速度最快的压缩和解压缩文件管理器。支持多核快速压缩、文件拖放,可创建带密码和多卷的压缩包,提取包括RAR/RAR5/7Z/ZIP在内30多种格式;支持WinZip、7-Zip和WinRAR及其它压缩格…...
算法笔记.spfa算法(bellman-ford算法的改进)
题目:(来源于AcWing) 给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环, 边权可能为负数。 请你求出 1 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点,则输出 impossible。 …...
HTML给图片居中
在不同的布局场景下,让 <img> 元素居中的方法有所不同。下面为你介绍几种常见的居中方式 1. 块级元素下的水平居中 如果 <img> 元素是块级元素(可以通过 display: block 设置),可以使用 margin: 0 auto 来实现水平居…...
C#中用 OxyPlot 在 WinForms 实现波形图可视化(附源码教程)
今天给大家安利一个超级实用的绘图控件库——OxyPlot,配合WinForms使用,让你轻松绘制专业级图表! 本文将手把手教你如何搭建一个简单的波形图显示窗口,完整步骤 源码解析,建议收藏! 项目搭建步骤…...
arm-linux emmc镜像备份 和 rootfs镜像备份
介绍 对于系统镜像存储介质,我们更推荐使用eMMC, eMMC具有更快的读写速度和更高的稳定系, 而SD卡会有兼容性较差的问题, 使用部分品牌部分系列的SD卡会导致系统无法启动或运行异常。 另外,安卓系统镜像无法运行在SD卡上。 注意事项 使用野火LubanCat的镜像烧录到SD卡, 只…...
opencv--图像变换
图像变换 图像滤波用于处理像素(去噪),从而改变图像质量。 图像的几何变换是指改变图像的几何位置、几何形状、几何尺寸等几何特征。 <详细了解,看opencv书> 概念 矩阵的运算 链接 齐次坐标 链接 齐次坐标就是用N1维来代表N维坐标ÿ…...
C语言基础(day0424)
目录 一. 键盘输入 1.1 grtchar() 1.2 scanf() 总结: 二. 全局变量/局部变量(函数的分类) 1.全局变量 2.局部变量 三.C语言内存模型(堆栈内存and so on ) 3.1 栈区&#x…...
前端项目搭建集锦:vite、vue、react、antd、vant、ts、sass、eslint、prettier、浏览器扩展,开箱即用,附带项目搭建教程
前端项目搭建集锦:vite、vue、react、antd、vant、ts、sass、eslint、prettier、浏览器扩展,开箱即用,附带项目搭建教程 前言:一、Vue项目下载快速通道二、React项目下载快速通道三、BrowserPlugins项目下载快速通道四、项目搭建教…...
Next.js v15 eslint 规则配置
问题 An empty interface declaration allows any non-nullish value, including literals like 0 and "". If that’s what you want, disable this lint rule with an inline comment or configure the ‘allowInterfaces’ rule option.If you want a type meanin…...
【C语言经典算法实战】:从“移动距离”问题看矩阵坐标计算
🎁个人主页:User_芊芊君子 🎉欢迎大家点赞👍评论📝收藏⭐文章 🔍系列专栏:AI 【前言】 在C语言算法学习与实践领域中,矩阵相关问题是极具代表性且高频出现的题型。“移动距离”问题将…...
算法题(133):二维差分
审题: 本题需要我们多次对某个矩形区域的数据加k,最后输出加完的数据 思路: 方法一:二维差分 本题涉及的是对二维的区间加同一个数的操作,且只显示一次最终结果,所以我们可以使用差分的方法 二维差分的性质…...
java kafka
安装 安装下载 导入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apach…...
数据结构【树和二叉树】
树和二叉树 前言1.树1.1树的概念和结构1.2树的相关术语1.3树的表示方法1.4 树形结构实际运用场景 2.二叉树2.1二叉树的概念和结构2.2二叉树具备以下特点:2.3二叉树分类 3.满二叉树4.完全二叉树5.二叉树性质6.附:树和二叉树图示 前言 欢迎莅临姜行运主页…...