mysql存储过程逻辑与_MYSQL存储过程即常用逻辑知识点总结

2023-10-31

Mysql存储过程

1.创建存储过程语法(格式)

DELIMITER $

CREATE PROCEDURE 存储过程名A(IN 传入参数名a INT,IN 传入参数名b VARCHAR(20),OUT 返回参数名c INT)

BEGIN

内容..........

END $

解析:

IN 代表传入的参数,定义传入参数名,并且后面跟上传入参数类型(INT,VARCHAR,DOUBLE,........)

OUT 代表存储过程执行完返回的数据,定义参数名,并且后面跟上参数类型(INT,VARCHAR,DOUBLE,........)

INOUT 代表既可以传入也可以返回 ,定义参数名,并且后面跟上参数类型(INT,VARCHAR,DOUBLE,........)

2.存储过程内具体语法与逻辑

A.定义变量语法:

DECLARE 变量名a 参数类型(INT,VARCHAR(20),BOOLEAN,........) [DEFAULT NULL];

注:可以在参数类型后面加 DEFAULT NULL; 来设置初始值。

B.变量赋值:

方式1(直接对变量进行赋值):

SET 定义的变量a = NEW();

方式2(sql查询的结果直接赋值给变量):

SELECT `student`.age INTO 定义的变量a FROM `student` WHERE...........

方式3(sql查询的结果直接赋值给多个变量):

SELECT `student`.name AS 定义的变量a,`student`.age AS 定义的变量b INTO 定义的变量a,定义的变量b FROM `student` ...............

c.逻辑判断:

#IF判断:

IF 条件语句(3>5) THEN

条件为TRUE时执行.........;

END IF;

#IF ELSE判断:

IF 条件(a>0) THEN

条件为(a>0)时执行........;

ELSE IF 条件(a<0) THEN

条件为(a<0)时执行.......;

ELSE

其它执行.......;

END IF;

D.游标,(LOOP)循环:

#例.单游标循环:create procedure my_procedure() -- 创建存储过程

begin -- 开始存储过程

declare my_id varchar(32); -- 自定义变量1

declare my_name varchar(50); -- 自定义变量2

DECLARE done INT DEFAULT FALSE; -- 自定义控制游标循环变量,默认false

DECLARE cur CURSOR FOR ( SELECT id, name FROM t_people ); -- 定义游标并输入结果集

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; -- 绑定控制变量到游标,游标循环结束自动转true

OPEN cur; -- 打开游标

posLoop: LOOP -- 开始循环体,myLoop为自定义循环名,结束循环时用到

FETCH cur into my_id, my_name; -- 将游标当前读取行的数据顺序赋予自定义变量12

IF done THEN -- 判断是否继续循环

LEAVE posLoop; -- 结束循环

END IF;

-- 自己要做的事情,在 sql 中直接使用自定义变量即可

UPDATE t_user SET c_name = my_name WHERE id = my_id and rtrim(ltrim(c_name)) = ''; -- 左右去空格

COMMIT; -- 提交事务

END LOOP posLoop; -- 结束自定义循环体

CLOSE cur; -- 关闭游标

END; -- 结束存储过程

#例.多游标循环:create procedure my_procedure() -- 创建存储过程begin -- 开始存储过程

declare my_id varchar(32); -- 自定义变量1

declare my_name varchar(50); -- 自定义变量2

DECLARE done INT DEFAULT FALSE; -- 自定义控制游标循环变量,默认false

DECLARE cur_1 CURSOR FOR ( SELECT id, name FROM t_people ); -- 定义游标并输入结果集

DECLARE cur_2 CURSOR FOR ( SELECT id_2,name_2 FROM t_people_2); --定义游标并输入结果集

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; -- 绑定控制变量到游标,游标循环结束自动转true

OPEN cur_1; -- 打开游标

posLoop: LOOP -- 开始循环体,myLoop为自定义循环名,结束循环时用到

FETCH cur_1 into my_id, my_name; -- 将游标当前读取行的数据顺序赋予自定义变量12

IF done THEN -- 判断是否继续循环

LEAVE posLoop; -- 结束循环

END IF;

-- 自己要做的事情,在 sql 中直接使用自定义变量即可

UPDATE ..........;  --自己要做的具体操作

END LOOP posLoop; -- 结束自定义循环体

CLOSE cur_1; -- 关闭游标

SET done = FALSE;  -- 因为当第一个游标遍历完后其值被handler设置为TRUE了,如果不用set把它设置为 FALSE ,那么第二个游标就不会遍历了。(最好是在每个打开游标的操作前都用该语句,以确保游标能真正遍历)

OPEN cur_2; -- 打开游标

posLoop_2: LOOP -- 开始循环体,myLoop为自定义循环名,结束循环时用到

FETCH cur_2 into my_id, my_name; -- 将游标当前读取行的数据顺序赋予自定义变量12

IF done THEN -- 判断是否继续循环

LEAVE posLoop_2; -- 结束循环

END IF;

-- 自己要做的事情,在 sql 中直接使用自定义变量即可

INSERT ..........;   --自己要做的具体操作

END LOOP posLoop_2; -- 结束自定义循环体

CLOSE cur_2; -- 关闭游标

END; -- 结束存储过程

3.存储过程的调用

#调用没有返回值的存储过程CALL 存储过程名(参数.....);

#调用有返回值的存储过程(获得返回值)

CALL 存储过程名(@aaa);

SELECT @aaa;

4.删除存储过程

DROP PROCEDURE 存储过程名;

5.注意事项

存储过程中的分号(;)很重要,尽量不要省略。

您可能感兴趣的文章:MySql存储过程之逻辑判断和条件控制

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql存储过程逻辑与_MYSQL存储过程即常用逻辑知识点总结 的相关文章

  • iOS图片缩放

    图片按比例缩放居中裁剪 UIImage imageCompressForSize UIImage sourceImage targetSize CGSize size UIImage newImage nil CGSize imageSiz
  • 海康OSD添加获取及清除

    函数 NET DVR SHOWSTRING V30 OSD信息集 NET DVR GetDVRConfig 获取 NET DVR SetDVRConfig 设置 添加 设置 OSD 字符叠加参数 param iUserID loginId
  • 计算机网络进阶 知乎,【知乎】计算机网络这门课为何如此之难

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 操作系统和计算机网络的共同点 在于它们都是相当复杂的体系结构 如果觉得难 也许是因为自己没能产生足够的求知欲 你也说了 无聊 晦涩 而无聊感其实是没治的 对课程的热情和对女生的爱慕感其实差不多
  • Java知识体系总结 #CSDN博文精选# #Java# #IT# #系统化学习#

    大家好 我是小C 又见面啦 文章过滤器 精选大咖干货 助力学习之路 5天20篇CSDN精选博文带你掌握系统化学习方法 专栏将挑选有关 系统化学习方法 的20篇优质文章 帮助大家掌握更加科学的学习方法 在这里 你将收获 快速掌握系统化学习的理
  • 蜂蜜鉴别

    气泡鉴别法 自然气泡 如果超市中的瓶装蜂蜜不能打开瓶盖 可以观察一下蜂蜜上层是否有气泡 这种气泡可不是搅拌摇晃出来泡泡 而是未触碰蜂蜜之前的气泡 如果有 说明蜂蜜水分大 浓度不够或存放时间太长导致发酵 这样的蜜保存期短 容易坏 搅拌摇动气泡
  • python按钮居中_button按钮居中

    今天在写页面时 发现给button按钮设置居中时 css页面写了text align center 但是不起作用 用了display属性也无作用 试了好多次发现要给button按钮添加个div 然后让div居中就可以了 以下写个test来说
  • 掌握Python的X篇_36_定义类、名称空间

    本篇将会重新回到python语法的主线 并且开展新的篇章 那就是面向对象的编程 文章目录 1 面向对象 2 定义类 3 类的名称空间性质 1 面向对象 面向对象是一种编程的思想 并不是限制在某一种语言上的 不同语言面向对象的表达能力是不一样
  • OpenWRT 使用USB 4G上网卡

    笔者使用的是一个4G上网卡 可以通过USB插在电脑上进行上网 即可做网卡使用 我使用的是树莓派4B来安装OpenWrt 其他硬件大同小异 只要支持USB并且能驱动上网卡 笔者的硬件环境如下图 插入USB上网卡 在管理面板操作 网络 gt 接
  • 如何设置ntp出现漂移的问题

    如何设置ntp出现漂移的问题 1 执行date命令 查看该host机器时间是否正常 2 找到ntp服务器 执行ntpdate time ntp org 3 在crontab中添加 0 12 usr sbin ntpdate
  • c++_设计一个 Studnet(学生)类

    设计一个 Studnet 学生 类 1 基本信息 学号 姓名 性别 出生日期 年级 班级 院系 专业 其中 基本信息为 private 属性 成员函数为 public 属性 2 Student 类有多个构造函数 缺省构造函数 带参数的构造函
  • JUC基础——线程池

    juc基础 线程池 前言 一 线程池是什么 二 管理线程池 1 线程池种类 2 线程池参数 3 创建线程池 三 线程池状态 四 线程池的任务提交 1 execute 2 submit 五 线程执行异常 六 线程池执行步骤 简易 七 线程池执
  • 9个 强化学习现实生活中的应用

    大多数人类和动物的学习可以说属于无监督学习 有人说 如果智能是一块蛋糕 那么无监督学习就是蛋糕 监督学习是锦上添花 强化学习是锦上添花 这似乎很有趣 对吧 强化学习是最接近人类学习的 就像我们人类从我们生活的动态环境中学习 我们的行为决定我
  • java不通过构造函数创建对象(Unsafe)

    java中不通过构造函数创建对象 也有说不创建对象直接执行成员方法 这里就不和你们扯什么通过 反序列化 clone等方法了 个人觉得都是在胡扯 如何不执行构造函数创建对象 先来带大家认识一个类 sun misc Unsafe 该类主要提供一
  • MySQL入門_テーブル作成

    create database case a show databases drop database case a create database case db use case db drop table if exists user
  • JS之返回字符串最后出现的位置lastIndexOf

    作用 lastIndexOf 方法可返回一个指定的字符串值最后出现的位置 在一个字符串中的指定位置从后向前搜索 语法 stringObject lastIndexOf searchvalue fromindex 参数1 必需 规定需检索的字
  • [ 人力资源面试篇 ] HR 面试题分析详解大集合,看完直怼面试官(一)

    博主介绍 博主介绍 大家好 我是 PowerShell 很高兴认识大家 主攻领域 渗透领域 数据通信 通讯安全 web安全 面试分析 点赞 评论 收藏 养成习惯 一键三连 欢迎关注 一起学习 一起讨论 一起进步 文末有彩蛋 作者水平有限 欢
  • Python面试题

    1 一行代码实现1 100之和 利用sum 函数求和 2 如何在一个函数内部修改全局变量 函数内部global声明 修改全局变量 3 列出5个python标准库 os 提供了不少与操作系统相关联的函数 sys 通常用于命令行参数 re 正则
  • 社区发现:论文中模块度Q的计算

    2 Extending the definition of modularity to directed graphs with overlapping communities 参考文献 1 刘传建 复杂网络中的社团结构划分及分析应用 D
  • glfwPollEvents()程序崩溃

    系列文章目录 文章目录 系列文章目录 前言 一 程序崩溃的地方找不到 二 解决步骤 1 vs2019中打开 诊断工具 窗口 2 在vs2019中打开 并行堆栈 窗口 总结 例子 源码下载 前言 如果使用GLFW 没有这句glfwPollEv

随机推荐

  • dz 2级域名

    例如 http www cheungfei com 开启了二级域名 http bbs cheungfei com 开启之后发现不能同步登陆 刚开始以为要在Ucenter中添加应用 后来发现问题还没有解决 到DISCUZ官网看看别人的帖子 才
  • 多线程、定时器----基础认识篇1

    1 多线程一般通过使用thread的子类或者往thread构造方法中传入runnable对象实现 也就是常说的 继承 thread类 和 实现runnable接口 注 实现runnable接口可以实现线程 原理是 在thread的run方法
  • Instagram Shop如何开通?如何销售?最全面攻略

    借助 Instagram 商店 品牌可以策划一系列可购物的商品 这些商品可通过其 Instagram 个人资料直接访问 这使得在应用程序上销售更容易 也被潜在客户发现 一 什么是Instagram Shop Instagram 商店为商家提
  • 2021 年山东省职业院校技能大赛中职组“网络安全” 赛项

    2021 年山东省职业院校技能大赛 中职组 网络安全 赛项 竞赛题库 网络安全赛项专家组 2021 年 11 月 赛题说明 一 竞赛时间安排与分值权重 二 竞赛拓扑图 模块编号 模块名称 竞赛时间 小时 权值 A 基础设施设置与安全加固 3
  • php 操作 MySQL 中的Blob类型

    我们需要保存一个文件或者一张图片或者其他二进制或多媒体文件时 经常选择使用 类型 一 基本使用 Blob就是一种Mysql的数据类型 它是一个二进制大型对象 可以作为大量数据的容器 其实更准确地说Blob是一系列数据类型 MySQL的四种B
  • 深入源码分析Spring为什么不支持构造方法的循环依赖

    我们知道当通过构造方法的方式注入属性时 是不支持循环依赖这种场景的 本文主要通过分析源码看看为什么构造方法不能支持循环依赖 当然 如果读者还不了解循环依赖的问题 建议先结合源码搞清楚 可以先看看这篇文章 深入源码分析Spring如何解决循环
  • 高通LK代码devinfo分区 read_device_info

    有一个devinfo分区专门用来保存一些信息 在devinfo分区没烧录过的情况下 默认Charger screen enabled false 没有关机充电动画 fastboot oem device info lk调用读这些信息 当然不
  • 宝塔搭建网站教程php,怎么利用宝塔面板搭建网站详细教程

    利用宝塔面板搭建网站是当前主流形式 宝塔面板操作简单 可视化操作 是新手和老司机搭建网站的首选 今天我的主题网就给小白们分享下怎么利用宝塔搭建自己的网站 如果你还没有安装宝塔可以参考 宝塔面板安装小白教程 来进行安装 1 宝塔面板添加站点步
  • 【满分】【华为OD机试真题2023B卷 JAVA&JS】经典屏保

    华为OD2023 B卷 机试题库全覆盖 刷题指南点这里 经典屏保 知识点循环迭代编程基础 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 DVD机在视频输出时 为了保护电视显像管 在待机状态会显示 屏保动画 如下图所示 DV
  • JS的一些数据类型的转换

    bytes 转 16进制字符串 function bytesToHex bytes for var hex i 0 i lt bytes length i hex push bytes i gt gt gt 4 toString 16 he
  • 入行网络工程师一年的心得体会

    本人与2019年毕业与天津某高校的网络工程专业 大学期间就考了一个网络工程师的软考中级职称 过了一个没啥用的英语四级 也有想过考一个华为或者思科的IE证书 但是价格对于一个学生党来说 确实代价太大了 报一个培训班1w5 考试费用零零散散加起
  • RabbitMQ入门教程(安装,管理插件,Publisher/Consumer/交换机/路由/队列/绑定关系,及如何保证100%投递等)

    RabbitMQ入门教程 安装 管理插件 Publisher Consumer 交换机 路由 队列 绑定关系 及如何保证100 投递等 1 RabbitMQ简介及AMQP协议 开源的消息代理和队列服务器 基于AMQP Advanced Me
  • IDEA 无法找到jdk,只能找到jre解决方式(亲测有效)

    在第一次使用IDEA的时候 发现需要自己去配置SDK的路径 但发现死活找不到jdk 只能找到jre 搜索资料发现可能是只装了jre 没有装jdk 在配置SDK前先要配置Java的核心 JDK 其实JDK就是SDK 只不过SDK的配置依赖着J
  • asp.net core identity学习1

    ASP NET Identity 学习 创建一个Asp net core mvc项目 添加Nuget包 Microsoft EntityFrameworkCore SqlServer 3 1 3 Microsoft EntityFramew
  • 论文阅读:AutoAssign

    文章目录 1 论文总述 2 密集预测型FCOS正负样本分配的不足 3 Comparison of label assignment between different typical detectors 4 we transform the
  • 2.1 Git 基础 - 获取 Git 仓库

    2 1 Git 基础 获取 Git 仓库 版本说明 版本 作者 日期 备注 0 1 loon 2019 3 19 初稿 目录 文章目录 2 1 Git 基础 获取 Git 仓库 版本说明 目录 一 本章导读 二 获取 Git 仓库 1 在现
  • Google Protobuf详解

    首先要知道几个清楚的概念 RPC Remote Procedure Call 远程过程调用 很多RPC框架都是跨语言的 使用步骤 定义一个接口说明文件 描述了对象 结构体 对象成员 接口方法等一系列信息 通过RPC框架所提供的编译器将接口说
  • idea crack

    Xms1128m Xmx1750m XX ReservedCodeCacheSize 240m XX UseConcMarkSweepGC XX SoftRefLRUPolicyMSPerMB 50 ea Dsun io useCanonC
  • IoT技术架构与安全威胁

    引言 物联网IoT的英文全称是 The Internet of Things 即物联网就是物物相连的互联网 也就是人们常说的万物互联 万物互联是一把双刃剑 它既能会给生活带来巨大的生活便利 同时也会带来巨大的安全风险 本文选自 智能硬件安全
  • mysql存储过程逻辑与_MYSQL存储过程即常用逻辑知识点总结

    Mysql存储过程 1 创建存储过程语法 格式 DELIMITER CREATE PROCEDURE 存储过程名A IN 传入参数名a INT IN 传入参数名b VARCHAR 20 OUT 返回参数名c INT BEGIN 内容 END