MySQL高级语句(三)

news2024/11/15 7:15:15

一、正则表达式(REGEXP)

1、正则表达式匹配符

字符解释举列
^匹配文本的开始字符’ ^aa ’ 匹配以 aa 开头的字符串
$匹配文本的结束字符’ aa$ ’ 匹配以aa结尾的字符串
.匹配任何单个字符’ a.b '匹配任何a和b之间有一个字符的字符串
*匹配零个或多个在它前面的字符’ ab*c ’ 匹配 c 前面有任意个 b
+匹配前面的字符1次或多次’ ab+ ’ 匹配以 a 开头,后面至少一个 b 的字符串
字符串匹配包含指定的字符串’ aa '匹配含有 aa 的字符串
a1 I a2匹配 a1 或 a2‘aa l bb’ 匹配 aa 或者 bb
[…]匹配字符集合中的任意一个字符‘[abc]’ 匹配 a 或者 b 或者 c
[^…]匹配不在括号中的任何字符’ [^ab] ’ 匹配不包含 a 或者 b 的字符串
{2}匹配前面的字符串n次’ a{2} ’ 匹配含有2个a的字符串
{a,b}匹配前面的字符串至少n次,至多m次’ f{1,3} ’ 匹配 f 最少1次,最多3次

2 语法

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

select * from test1 where name regexp '三$';
select * from test1 where age regexp '18|22';
select * from test1 where name regexp '^小|^阿';

二、存储过程

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 test3 values (2,'lucy',23);
    -> insert into test3 values (2,'jack',21);
    -> insert into test3 values (4,'nancy',22);
    -> select * from test3;
    -> end ##


  

3.2 调用存储过程

CALL proc;

3.3 查看存储过程

SHOW CREATE PROCEDURE [数据库.] 存储过程名;      #查看某个存储过程的具体信息(如果在指定库中,库名可以省略)
SHOW CREATE PROCEDURE learn.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

#调用了proc2存储过程,输出参数,改变了num变量的值

INOUT输入输出参数


  
调用了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 test3 set age=age+1;                 #设置test5中的age+1
    -> else                                        #如果变量var不大于10,则执行下面过程体
    -> update test3 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 test5(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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/61676.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构—树、有序二叉树

文章目录树的概述树的分类二叉树的遍历有序二叉树代码通过链表方式构建有序二叉树通过递归方式实现有序二叉树递归遍历有序二叉树中序遍历&#xff1a;先序遍历&#xff1a;后序遍历&#xff1a;删除节点1、删除叶子节点删除叶子节点总结图示2、删除只有一个子树的节点删除只有…

毕业设计-基于深度学习火灾烟雾检测识别系统-yolo

前言 &#x1f4c5;大四是整个大学期间最忙碌的时光,一边要忙着准备考研,考公,考教资或者实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过…

Spring循环依赖源码解析(深度理解)

文章目录前言本章目标一、什么是循环依赖&#xff1f;1、那么循环依赖是个问题吗&#xff1f;2、但是在Spring中循环依赖就是一个问题了&#xff0c;为什么&#xff1f;二、Bean的生命周期2.1、在Spring中&#xff0c;Bean是如何生成的&#xff1f;2.2、那么这个注入过程是怎样…

GitLab CI/CD系列教程(一)

来自&#xff1a;GitLab CI/CD系列教程&#xff08;一&#xff09;&#xff1a;Docker安装GitLab_哔哩哔哩_bilibili 1. 创建虚拟机并连接Xterm 创建一个4G内存的虚拟机&#xff0c;否则很容易启动不了&#xff0c;报502 虚拟机的创建看这篇&#xff1a; VMware16的安装及VM…

基于java+ssm+vue+mysql的网上书店

项目介绍 本网上系统是针对目前网上的实际需求&#xff0c;从实际工作出发&#xff0c;对过去的网上系统存在的问题进行分析&#xff0c;结合计算机系统的结构、概念、模型、原理、方法&#xff0c;在计算机各种优势的情况下&#xff0c;采用目前最流行的B/S结构和java中流行的…

从0开始搭建vue2管理后台基础模板

网站主要完成&#xff1a;侧边菜单栏、页面标签卡、内容栏 源代码gitee地址&#xff1a;https://gitee.com/zhao_liangliang1997/navigation-bar 一、起步 1、创建vue项目 vue create 项目名2、引入element 3、其他安装 1、首先需要安装如下 cnpm install vuex cnpm install…

DockerCompose安装、使用 及 微服务部署实操

1 什么是DockerCompose DockerCompose是基于Compose文件帮助我们快速的部署分布式应用。 解决容器需手动一个个创建和运行的问题&#xff01; DockerCompose本质上也是一个文本文件&#xff0c;其通过指令定义集群中的每个容器如何运行。我们可以将其看做是将多个docker run…

Ansible 自动化运维工具的使用

目录 一、Ansible简介 二、Ansible 的安装和使用 1.下载 2.使用 三、Ansible命令和模块 1.命令格式 2.命令行模块 &#xff08;1&#xff09;command 模块 &#xff08;2&#xff09;shell 模块 &#xff08;3&#xff09;cron 模块 &#xff08;4&#xff09;user …

多线程 3

多线程 3 : 文章目录1.线程安全2. 产生线程安全的原因3. synchronized - 加锁操作4.可重入5.死锁问题6. volatile 关键字7.wait 和 notify1.线程安全 为啥会出现线程安全 &#xff1f;   罪魁祸首&#xff0c;还是多线程的抢占式执行&#xff0c; 正因为抢占式执行&#xff0c…

Java项目:SSM场地预订管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目分为前后台&#xff0c;前台为普通用户登录&#xff0c;后台为管理员登录&#xff1b; 用户角色包含以下功能&#xff1a; 按分类查看场…

【车载开发系列】UDS诊断---通信控制($0x28)

【车载开发系列】UDS诊断—通信控制&#xff08;$0x28&#xff09; UDS诊断---通信控制&#xff08;$0x28&#xff09;【车载开发系列】UDS诊断---通信控制&#xff08;$0x28&#xff09;一.概念定义二.实现原理三.应用场景四.子功能五.报文格式1&#xff09;请求报文2&#xf…

自动导入指定文件夹内的文献到 Endnote 中

简介 最近正着手写一篇综述文章&#xff0c;来整体把握下自己研究领域的历史、方法、最新进展与趋势。由于需要对相关文献进行搜集、阅读和分类。庄小编使用 EndNote 来进行管理文献。 在使用较长时间后&#xff0c;整理了几个超级好用的小技巧。比如&#xff1a;自动导入指定…

pikachu靶场-upload-速通

upload-速通client checkMIME typegetimagesizeclient check 最简单的&#xff0c;先上传一张含有一句话木马的图片&#xff0c;抓包修改图片后缀为php&#xff0c;放包发送就行 访问并确认该上传文件是否以php形式解析 蚁剑直连&#xff1a; MIME type 后端php检查上传文…

基于MSER的高速公路交通标志提取matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 自然场景下的文本检测是自然场景图像信息提取的基础,在车牌识别、实时翻译、图像检索等领域具有广泛的应用价值及研究意义。基于连通区域的方法是自然场景文本检测中最为常见的方法,其中最大稳定…

[附源码]Python计算机毕业设计SSM街舞公司管理系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Java Script 内置对象(三) --------- Array 对象

判断是否为数组有两种方式&#xff0c;instanceof 和 Array.isArray( 参数 )&#xff0c;两者判断方法均为如果是数组则返回 true&#xff0c;不是数组则返回 **false&#xff0c;**其中第二个方法为H5新增加的方法 var arr[]; var obj{}; console.log(arr instanceof Arra…

微服务入门案例

boot与cloud版本 springboot:提供了快速开发微服务的能力 springcloud提供了微服务治理的能力&#xff08;服务注册与发现、服务降级、限流、熔断、网关、负载均衡、配置中心...&#xff09;&#xff0c;为微服务开发提供了全家桶服务 springboot的版本查看地址&#xff1a;Spr…

云原生之Docker简介和环境准备

Docker简介一、主机环境二、Docker 安装三、Docker简介3.1、Docker解决的问题3.2、Docker技术边界3.3、Docker带来的改变3.4、Docker和虚拟机的区别3.5、Docker 架构图3.6、直观感受client请求server总结后言一、主机环境 &#xff08;1&#xff09;ubuntu-20.04.4-live-serve…

【torch.utils.data】 Dataset和Dataloader的解读和使用

文章目录torch.utils.data前言DatasetDataloader实践参考torch.utils.data 前言 Pytorch中的 torch.utils.data 提供了两个抽象类&#xff1a;Dataset 和 Dataloader。Dataset 允许你自定义自己的数据集&#xff0c;用来存储样本及其对应的标签。而 Dataloader 则是在 Datase…

LTspice XVII > Transformer 变压器仿真

目录 第①步设置 第②步设置 第③步设置 第④步设置 输出结果 最近在看“无线电基础电路实作修订版 [&#xff08;美&#xff09;西尔弗 著] 2014年版”这本书&#xff0c;打算好好修炼下无线电方面的基础知识&#xff0c;让自己更加牛逼一些&#xff0c;工作中偶尔可以装…