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

MySQL数据库之——高级[进阶]SQL语句(二)正则表达式和存储过程

文章目录

  • 一、正则表达式(REGEXP)
    • 1、正则表达式匹配符
    • 2、语法
  • 二、存储过程
    • 1、概述
    • 2、优点
    • 3、 创建、调用、查看和删除存储过程
    • 4、存储过程的控制语句

一、正则表达式(REGEXP)

1、正则表达式匹配符

在这里插入图片描述

2、语法

SELECT 选项 FROM 表名 WHERE 选项 REGEXP (模式)

select * from test1 where name regexp 'cy';
select * from test1 where age regexp '1$';
select * from test1 where age regexp '20|23';
select * from test1 where name regexp '^n|^k';

在这里插入图片描述

二、存储过程

1、概述

存储过程是一组为了完成特定功能的SQL语句集合

存储过程在使用过程中是将常用或者复杂的工作预先使用 SQL 语句写好并用一个指定的名称存储起来,这个过程经编译和优化后存储在数据库服务器中,当需要使用时,只需要调用即可

存储过程在执行上比传统SQL速度更快、执行效率更高。

2、优点

执行一次后,会将生成的二进制代码驻留缓冲区,提高执行效率

SQL语句加上控制语句的集合,灵活性高

在服务器端存储,客户端调用时,降低网络负载

可多次重复被调用,可随时修改,不影响客户端调用

可完成所有的数据库操作,也可控制数据库的信息访问权限

3、 创建、调用、查看和删除存储过程

3.1 创建存储过程

DELIMITER ##                                            #将语句的结束符号从分号;临时改为两个$$ (可以是自定义)
CREATE PROCEDURE proc()                                         #创建存储过程,过程名为Proc, 不带参数
-> BEGIN                                     #过程体以关键字BEGIN开始
-> SELECT * FROM test5;                                              #过程体语句(自己根据需求进行编写)
-> END ##                                        #过程体以关键字END结束
DELIMITER ;                                     #将语句的结束符号恢复为分号

实例操作:

mysql> delimiter ##
mysql> create procedure proc()-> begin-> insert into test5 values (4,'lucy',23,'女');-> insert into test5 values (5,'jack',21,'男');-> insert into test5 values (6,'nancy',22,'女');-> select * from test5;-> end ##

在这里插入图片描述
3.2 调用存储过程

CALL proc;

在这里插入图片描述
3.3 查看存储过程

SHOW CREATE PROCEDURE [数据库.] 存储过程名;         #查看某个存储过程的具体信息(如果在指定库中,库名可以省略)
SHOW CREATE PROCEDURE bbc.proc;                 #未省略库名
SHOW CREATE PROCEDURE proc;                 #省略库名SHOW PROCEDURE STATUS [LIKE '%proc%'] \G                #竖列查看

实例操作:

方法一:
show create procedure proc;
show create procedure proc\G;
方法二:
show procedure status like '%proc%';
show procedure status like '%proc%'\G;

在这里插入图片描述
3.4 存储过程的参数
IN输入参数

表示调用者向过程传入值(传入值可以是字面量或变量)
OUT输出参数

表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)
INOUT输入输出参数

既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)
实例操作:
IN 传入参数

mysql> delimiter $$
mysql> create procedure proc1(in iage int)-> begin-> select * from test5 where age > iage ;-> end $$
Query OK, 0 rows affected (0.00 sec)mysql> delimiter ;
mysql> call proc1(21);

在这里插入图片描述
OUT输出参数

因为out是向调用者输出参数,不接收输入的参数,所以存储过程里的num为null

mysql> delimiter ##
mysql> create procedure proc2(out num int)-> begin-> select num;-> set num=6;-> select num;-> end ##
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
mysql> set @num=1;
Query OK, 0 rows affected (0.00 sec)mysql> call proc2(@num);
+------+
| num  |
+------+
| NULL |
+------+
1 row in set (0.00 sec)+------+
| num  |
+------+
|    6 |
+------+
1 row in set (0.00 sec)Query OK, 0 rows affected (0.00 sec)mysql> select @num;
+------+
| @num |
+------+
|    6 |
+------+
1 row in set (0.00 sec)  

在这里插入图片描述
#调用了proc2存储过程,输出参数,改变了num变量的值

INOUT输入输出参数

mysql> delimiter ##
mysql> create procedure proc3 (inout num int)-> begin-> select num;-> set num=6;-> select num;-> end ##
Query OK, 0 rows affected (0.00 sec)mysql> delimiter ;
mysql> set @num=1;
Query OK, 0 rows affected (0.00 sec)mysql> call proc3(@num);
+------+
| num  |
+------+
|    1 |
+------+
1 row in set (0.00 sec)+------+
| num  |
+------+
|    6 |
+------+
1 row in set (0.00 sec)Query OK, 0 rows affected (0.00 sec)mysql> select @num;
+------+
| @num |
+------+
|    6 |
+------+
1 row in set (0.00 sec)

在这里插入图片描述
调用了proc3存储过程,接受了输入的参数,也输出参数,改变了变量

3.5 删除存储过程
存储过程内容的修改方法是通过删除原有存储过程之后以相同名称创建新的存储过程

DROP PROCEDURE IF EXISTS proc1;

在这里插入图片描述

4、存储过程的控制语句

4.1 条件控制语句 if-then-else … end if

mysql> delimiter ##                                #修改默认结束符为##
mysql> create procedure proc1(in iage int)         #创建存储过程proc1,参数为iage,数据类型为int-> begin                                       #过程体以关键词begin开始-> declare var int;                            #定义变量var为int类型-> set var=iage*2;                             #设置变量var等于传入参数的2倍-> if var >=20 then                            #如果var大于等于20,则执行下面的过程体-> update test5 set age=age+1;                 #设置test5中的age+1-> else                                        #如果变量var不大于10,则执行下面过程体-> update test5 set age=age-1;                 #设置表test5中的age-1-> end if;                                     #结束if语句-> end ##                                      #结束创建存储过程
Query OK, 0 rows affected (0.00 sec)mysql> delimiter ;                                 #重新修改默认结束符为原来的;
mysql> call proc1(10);                             #调用proc1的存储过程,并传入参数10
Query OK, 6 rows affected (0.00 sec)

在这里插入图片描述
4.2 循环语句while … end while

mysql> delimiter ##                       #修改默认结束符为##
mysql> create procedure proc4()           #创建存储过程为proc4-> begin                              #过程体以关键字begin开始-> declare var int;                   #定义变量var为int类型-> set var=0;                         #设置var=0-> while var <10 do                   #使用while循环,var要小于10-> insert into test2(id) values(var); #满足条件则进行添加数据,内容为变量var-> set var=var+1;                     #变量var每次循环后加1-> end while;                         #结束while循环-> end ##                             #结束创建存储过程
Query OK, 0 rows affected (0.00 sec)mysql> delimiter ;                        #重新修改默认结束符为原来的;
mysql> call proc4;                        #调用proc4存储过程
Query OK, 1 row affected (0.01 sec)

在这里插入图片描述

相关文章:

MySQL数据库之——高级[进阶]SQL语句(二)正则表达式和存储过程

文章目录一、正则表达式&#xff08;REGEXP&#xff09;1、正则表达式匹配符2、语法二、存储过程1、概述2、优点3、 创建、调用、查看和删除存储过程4、存储过程的控制语句一、正则表达式&#xff08;REGEXP&#xff09; 1、正则表达式匹配符 2、语法 SELECT 选项 FROM 表名 …...

Python基于周立功盒子的二次开发的准备工作

Python基于周立功盒子的二次开发的准备工作 一、基本介绍     基于周立功的二次开发是python通过调用zlgcan.dll,来实现CAN卡的通讯收发报文的,在python中通过ctypes模块调用c++动态库的接口函数(zlgcan.dll),我们需要根据我的电脑选择相对应版本的dll,比如64位的操…...

2023年PMP考生|考前必练全真模拟题分享,附答案解析

“日日行&#xff0c;不怕千万里&#xff1b;常常做&#xff0c;不怕千万事。”每日五题&#xff0c;备考无压力&#xff01; 1、敏捷项目以价值为驱动交付&#xff0c;确定好所有待办事项的价值进而去制造可交付成果。那么在整个敏捷项目周期中&#xff0c;衡量团队交付的可交…...

Python入门教程+项目实战-7.1节: 条件控制结构

目录 7.1.1 理解条件控制 7.1.2 if,elif,else 7.1.3 条件表达式 7.1.4 条件控制可以嵌套 7.1.5 if语句的三元运算 7.1.6 系统学习python 7.1.1 理解条件控制 在日常生活中&#xff0c;我们常喜欢说如果, "如果怎么样&#xff0c;那么就会怎么样"。"如果&…...

【机器学习】P4 特征缩放与学习率

这里写自定义目录标题特征缩放标准化归一化平均值归一化收敛学习率特征缩放 特征缩放&#xff08;Feature scaling&#xff09;是一种数据预处理技术&#xff0c;它用于将不同尺度的特征值缩放到相同的范围内&#xff0c;以便更好地应用于机器学习算法中。在不进行特征缩放的情…...

《Python编程:从入门到实战》(第2版)学习笔记 第11章 测试代码

【写在前面】为进一步提高自己的python代码能力&#xff0c;打算把几本经典书籍重新过一遍&#xff0c;形成系统的知识体系&#xff0c;同时适当记录一些学习笔记&#xff0c;我尽量及时更新&#xff01;先从经典的《Python编程&#xff1a;从入门到实战》书籍开始吧。有问题欢…...

SpringBoot(1)基础入门

SpringBoot基础入门SpringBoot项目创建方式Idea创建SpringBoot官网创建基于阿里云创建项目手工搭建SpringBoot启动parentstarter引导类内嵌tomcat基础配置属性配置配置文件分类yaml文件yaml数据读取整合第三方技术整合JUnit整合MyBatis整合Mybatis-Plus整合DruidSpringBoot是由…...

利用Flow Simulation快速经济高效地解决传热难题

几乎一切事物都会经历某种程度的发热或冷却&#xff0c;而且对于许多产品来说&#xff0c;热管理已成为避免过度发热和实现功能正常运行的一个关键要求。能够有效解决传热问题的制造商将会在竞争中占有明显的优势。利用一个简单易用的流体分析应用程序 SOLIDWORKS Flow Simulat…...

揭开二维码背后的神秘面纱用二维码识别 API 就够了

写在前面 二维码&#xff08;QR code&#xff09;已经成为现代生活中不可或缺的一部分。二维码具有可靠性、快速识别、易于存储等优点&#xff0c;因此在广泛应用于支付、门票、社交网络、广告等方面。但是&#xff0c;对于大多数人来说&#xff0c;二维码背后的编码方式是完全…...

系统分析——系统构建最重要的一环

&#x1f31f;所属专栏&#xff1a;信息系统分析与设计 &#x1f414;作者简介&#xff1a;rchjr——五带信管菜只因一枚 &#x1f62e;前言&#xff1a;该系列将持续更新信息系统分析与设计课程的相关学习笔记&#xff0c;欢迎和我一样的小白订阅&#xff0c;一起学习共同进步…...

第1-第20个高级shell程序

高级shell脚本 1.使用Shell脚本批量修改文件名 #!/bin/bash for fi lein$(ls*.txt) do mv $file${file%%.*}.md done2.统计一个文本文件中某个单词出现的次数 #!/bin/bashword"example" count0 whilereadline do forwin$line do if["$w""$word&qu…...

【致敬嵌入式攻城狮第2期活动预热征文】学习安排

文章目录「 致敬未来的攻城狮计划 」——学习计划前言学习计划&#x1f697;单片机理论实践&#x1f697;学业阅读计划「 致敬未来的攻城狮计划 」——学习计划 &#x1f680;&#x1f680;开启攻城狮的成长之旅&#xff01;这是我参与的由 CSDN博客专家 架构师李肯和 瑞萨MCU …...

035:cesium加载KML文件,显示图形

第035个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中加载KML文件, 显示图形。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共83行)相关API参考:专栏目标示例效果 配置方式 1)查看基础设置:https:/…...

随想录Day42--动态规划: 416. 分割等和子集(终于吃下01背包了)

今天只有1道题&#xff0c;属于动态规划的01背包问题的应用。首先理解一下动态规划的01背包问题。推荐一个视频&#xff0c;动态规划DP0-1背包&#xff0c;这是我认为讲得最为通透的。很多讲解动态背包问题的&#xff0c;一上来就画二维表格&#xff0c;遍历背包或者遍历容量&a…...

字节跳动软件测试岗,前两面过了,第三面被面试官吊打,结局我哭了

阎王易见&#xff0c;小鬼难缠。我一直相信这个世界上好人居多&#xff0c;但是也没想到自己也会在阴沟里翻船。我感觉自己被字节跳动的HR坑了。 在这里&#xff0c;我只想告诫大家&#xff0c;offer一定要拿到自己的手里才是真的&#xff0c;口头offer都是不牢靠的&#xff0…...

bitlocker 笔记

介绍 bitlocker是windows自带的磁盘加密工具&#xff0c;win10专业版是可以使用的&#xff0c;其他家庭版本可能没有这个功能。有点类似与wd security。 功能 加密磁盘&#xff0c;当磁盘物理丢失时&#xff0c;防止磁盘中的数据泄露。举个例子&#xff0c;移动硬盘被偷&…...

Linux 压缩与解压命令

一、常见的压缩文件扩展名 1、*.Z compress程序压缩的文件 2、*.gz gzip程序压缩的文件 3、.tar.gz tar程序打包的文件&#xff0c;其中经过gzip的压缩 4、.tar tar程序打包的数据&#xff0c;并没有压缩过 5、.bz2 bzip2程序压缩的文件 6、.tar.bz2 tar程序打包的文件&a…...

python global函数用法及常用的 global函数代码

Python中的 global函数是用于在程序中定义变量的函数&#xff0c;在我们实际的开发中&#xff0c;我们可能会用到 global函数来定义变量&#xff0c;但是我们在这里就不具体介绍它的用法了。 global函数定义变量的方法&#xff1a; global函数使用参数a来指定变量在程序中的地址…...

大数据学完好就业么

Python的普及与数据挖掘、人工智能和数值计算等领域的蓬勃发展相关&#xff0c;但同时也与普遍编程需求的增加有关。 Python应用领域广泛&#xff0c;意味着选择Python的同学在学成之后可选择的就业领域有很多&#xff0c;加上Python本身的优势&#xff0c;致使现在越来越多的…...

CASAtomic 原子操作详解

文章目录CAS&Atomic 原子操作详解什么是原子操作CAS相关原子操作类的使用AtomicIntegerAtomicIntegerArray更新引用类型原子更新字段类LongAdderCAS&Atomic 原子操作详解 什么是原子操作 Mysql事务中的原子性就是一个事务中执行的多条sql&#xff0c;要么同时成功&am…...

STM32 FSMC/FMC接口详解:地址映射、时序配置与实战优化

1. 项目概述&#xff1a;深入理解STM32的FSMC/FMC接口在嵌入式开发中&#xff0c;尤其是涉及大屏显示、高速数据采集或复杂外部设备交互的项目里&#xff0c;我们常常会遇到一个绕不开的“硬骨头”——如何让STM32单片机高效、稳定地与外部并行存储器或设备通信。这时&#xff…...

别再手动点选了!用Python脚本5分钟搞定Abaqus批量加载节点力(附完整代码)

Python自动化赋能Abaqus&#xff1a;高效批量加载节点力的工程实践 在有限元分析领域&#xff0c;Abaqus作为行业标杆软件&#xff0c;其强大的计算能力与灵活的二次开发接口深受工程师青睐。然而&#xff0c;当面对需要为数百甚至上千个节点分别施加不同载荷的复杂工况时&…...

计算机科学论文降AI工具免费推荐:2026年计算机科学毕业论文降AI4.8元亲测99.26%知网达标完整指南

计算机科学论文降AI工具免费推荐&#xff1a;2026年计算机科学毕业论文降AI4.8元亲测99.26%知网达标完整指南 答辩前夕&#xff0c;AI率36%&#xff0c;学校要求15%以下。 用嘎嘎降AI&#xff08;www.aigcleaner.com&#xff09;&#xff0c;4.8元&#xff0c;两小时搞定&…...

零基础转行网安:3个月学习路线+就业方向(2026最新)

零基础转行网安&#xff1a;3 个月学习路线 就业方向&#xff08;2026 最新&#xff09; 最近刷到很多小白在问&#xff1a; “2026 年零基础还能转行网安吗&#xff1f;”“没有学历、没有基础、不会代码&#xff0c;多久能找到工作&#xff1f;”“网上教程杂乱&#xff0c…...

广告投放ROI断崖式下滑?立即排查ElevenLabs这4个语音合成致命偏差,2小时内修复

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;广告投放ROI断崖式下滑的语音归因真相 当广告主发现iOS 17设备上语音搜索转化路径中归因丢失率高达68%&#xff0c;却仍在依赖传统点击归因&#xff08;Click-Through Attribution&#xff09;模型时&a…...

不止VSIN!Cadence PSpice仿真库SOURCE.OLB里还有哪些宝藏信号源?实战对比与选型指南

不止VSIN&#xff01;Cadence PSpice仿真库SOURCE.OLB里还有哪些宝藏信号源&#xff1f;实战对比与选型指南 在电路仿真设计中&#xff0c;信号源的选择往往决定了仿真结果的准确性与实用性。许多工程师对PSpice中的VSIN元件较为熟悉&#xff0c;却忽略了SOURCE.OLB库中其他丰富…...

MOOTDX:Python通达信数据接口的完整指南

MOOTDX&#xff1a;Python通达信数据接口的完整指南 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx MOOTDX是一个专为量化投资和股票数据分析设计的Python通达信数据接口封装库&#xff0c;它提供…...

保姆级教程:在IMX6ULL开发板上手把手实现红外遥控器驱动(基于NEC协议与Linux 5.x内核)

从零构建IMX6ULL红外遥控驱动&#xff1a;NEC协议全解析与Linux 5.x实战指南 当你想在嵌入式设备上实现红外遥控功能时&#xff0c;NEC协议驱动的开发往往是第一个需要攻克的堡垒。本文将带你深入理解红外通信原理&#xff0c;并手把手完成从硬件连接到驱动测试的全流程。不同于…...

猫抓Cat-Catch终极指南:3分钟掌握浏览器资源嗅探完整方案

猫抓Cat-Catch终极指南&#xff1a;3分钟掌握浏览器资源嗅探完整方案 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否经常遇到这样的困扰&am…...

如何构建基于UNet的眼底血管图像分割系统

如何构建基于UNet的眼底血管图像分割系统 文章目录1. 数据预处理2. 定义UNet模型3. 训练过程4. 测试过程5. 日志记录1构建一个基于UNet的眼底血管图像分割系统涉及多个步骤&#xff0c;包括数据预处理、模型定义、训练过程、测试过程以及日志记录。下面是一个完整的指南&#x…...