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语句(二)正则表达式和存储过程
文章目录一、正则表达式(REGEXP)1、正则表达式匹配符2、语法二、存储过程1、概述2、优点3、 创建、调用、查看和删除存储过程4、存储过程的控制语句一、正则表达式(REGEXP) 1、正则表达式匹配符 2、语法 SELECT 选项 FROM 表名 …...
Python基于周立功盒子的二次开发的准备工作
Python基于周立功盒子的二次开发的准备工作 一、基本介绍 基于周立功的二次开发是python通过调用zlgcan.dll,来实现CAN卡的通讯收发报文的,在python中通过ctypes模块调用c++动态库的接口函数(zlgcan.dll),我们需要根据我的电脑选择相对应版本的dll,比如64位的操…...
2023年PMP考生|考前必练全真模拟题分享,附答案解析
“日日行,不怕千万里;常常做,不怕千万事。”每日五题,备考无压力! 1、敏捷项目以价值为驱动交付,确定好所有待办事项的价值进而去制造可交付成果。那么在整个敏捷项目周期中,衡量团队交付的可交…...
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 理解条件控制 在日常生活中,我们常喜欢说如果, "如果怎么样,那么就会怎么样"。"如果&…...
【机器学习】P4 特征缩放与学习率
这里写自定义目录标题特征缩放标准化归一化平均值归一化收敛学习率特征缩放 特征缩放(Feature scaling)是一种数据预处理技术,它用于将不同尺度的特征值缩放到相同的范围内,以便更好地应用于机器学习算法中。在不进行特征缩放的情…...
《Python编程:从入门到实战》(第2版)学习笔记 第11章 测试代码
【写在前面】为进一步提高自己的python代码能力,打算把几本经典书籍重新过一遍,形成系统的知识体系,同时适当记录一些学习笔记,我尽量及时更新!先从经典的《Python编程:从入门到实战》书籍开始吧。有问题欢…...
SpringBoot(1)基础入门
SpringBoot基础入门SpringBoot项目创建方式Idea创建SpringBoot官网创建基于阿里云创建项目手工搭建SpringBoot启动parentstarter引导类内嵌tomcat基础配置属性配置配置文件分类yaml文件yaml数据读取整合第三方技术整合JUnit整合MyBatis整合Mybatis-Plus整合DruidSpringBoot是由…...
利用Flow Simulation快速经济高效地解决传热难题
几乎一切事物都会经历某种程度的发热或冷却,而且对于许多产品来说,热管理已成为避免过度发热和实现功能正常运行的一个关键要求。能够有效解决传热问题的制造商将会在竞争中占有明显的优势。利用一个简单易用的流体分析应用程序 SOLIDWORKS Flow Simulat…...
揭开二维码背后的神秘面纱用二维码识别 API 就够了
写在前面 二维码(QR code)已经成为现代生活中不可或缺的一部分。二维码具有可靠性、快速识别、易于存储等优点,因此在广泛应用于支付、门票、社交网络、广告等方面。但是,对于大多数人来说,二维码背后的编码方式是完全…...
系统分析——系统构建最重要的一环
🌟所属专栏:信息系统分析与设计 🐔作者简介:rchjr——五带信管菜只因一枚 😮前言:该系列将持续更新信息系统分析与设计课程的相关学习笔记,欢迎和我一样的小白订阅,一起学习共同进步…...
第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期活动预热征文】学习安排
文章目录「 致敬未来的攻城狮计划 」——学习计划前言学习计划🚗单片机理论实践🚗学业阅读计划「 致敬未来的攻城狮计划 」——学习计划 🚀🚀开启攻城狮的成长之旅!这是我参与的由 CSDN博客专家 架构师李肯和 瑞萨MCU …...
035:cesium加载KML文件,显示图形
第035个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中加载KML文件, 显示图形。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共83行)相关API参考:专栏目标示例效果 配置方式 1)查看基础设置:https:/…...
随想录Day42--动态规划: 416. 分割等和子集(终于吃下01背包了)
今天只有1道题,属于动态规划的01背包问题的应用。首先理解一下动态规划的01背包问题。推荐一个视频,动态规划DP0-1背包,这是我认为讲得最为通透的。很多讲解动态背包问题的,一上来就画二维表格,遍历背包或者遍历容量&a…...
字节跳动软件测试岗,前两面过了,第三面被面试官吊打,结局我哭了
阎王易见,小鬼难缠。我一直相信这个世界上好人居多,但是也没想到自己也会在阴沟里翻船。我感觉自己被字节跳动的HR坑了。 在这里,我只想告诫大家,offer一定要拿到自己的手里才是真的,口头offer都是不牢靠的࿰…...
bitlocker 笔记
介绍 bitlocker是windows自带的磁盘加密工具,win10专业版是可以使用的,其他家庭版本可能没有这个功能。有点类似与wd security。 功能 加密磁盘,当磁盘物理丢失时,防止磁盘中的数据泄露。举个例子,移动硬盘被偷&…...
Linux 压缩与解压命令
一、常见的压缩文件扩展名 1、*.Z compress程序压缩的文件 2、*.gz gzip程序压缩的文件 3、.tar.gz tar程序打包的文件,其中经过gzip的压缩 4、.tar tar程序打包的数据,并没有压缩过 5、.bz2 bzip2程序压缩的文件 6、.tar.bz2 tar程序打包的文件&a…...
python global函数用法及常用的 global函数代码
Python中的 global函数是用于在程序中定义变量的函数,在我们实际的开发中,我们可能会用到 global函数来定义变量,但是我们在这里就不具体介绍它的用法了。 global函数定义变量的方法: global函数使用参数a来指定变量在程序中的地址…...
大数据学完好就业么
Python的普及与数据挖掘、人工智能和数值计算等领域的蓬勃发展相关,但同时也与普遍编程需求的增加有关。 Python应用领域广泛,意味着选择Python的同学在学成之后可选择的就业领域有很多,加上Python本身的优势,致使现在越来越多的…...
CASAtomic 原子操作详解
文章目录CAS&Atomic 原子操作详解什么是原子操作CAS相关原子操作类的使用AtomicIntegerAtomicIntegerArray更新引用类型原子更新字段类LongAdderCAS&Atomic 原子操作详解 什么是原子操作 Mysql事务中的原子性就是一个事务中执行的多条sql,要么同时成功&am…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...
无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...
