存储过程(SQL)

1.存储过程

存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。

2.MySQL存储过程创建

        1.语法
#创建存储过程
CREATE PROCEDURE 存储过程名 ([[IN|OUT|INOUT]] 参数名 数据类型) 过程体;#删除存储过程
DROP PROCEDURE IF EXISTS 存储过程名;
#删除存储过程
DROP PROCEDURE IF EXISTS  adduser;#创建存储过程
CREATE PROCEDURE adduser(num DOUBLE)
BEGINUPDATE `user` SET money = money - num WHERE name = '张三';UPDATE `user` SET money = money + num WHERE name = '李四';
END;
        2.过程体
BEGIN过程体
END;过程体每条SQL语句用';'隔开
        3.参数

                IN:

                        不管存储过程里面的参数怎么改变,都不影响外部变量。
                OUT:

                        不管参数传入之前的定义是什么,在存储过程中都为null。
                        存储过程里面对参数的改变,都会影响外部变量。
                INOUT:

                        参数在外部定义后,会将定义的变量传入。

                        存储过程里面对参数改变,都会影响外部的变量。

#IN0
CREATE PROCEDURE add2(IN num INT(20))
BEGINSET num = 111;SELECT num;
END;SET @a = 123;
CALL add2(@a);
SELECT @a;

#OUT
CREATE PROCEDURE add3(OUT num INT(20))
BEGINSELECT num;SET num = 111;
END;SET @a = 123;
CALL add3(@a);
SELECT @a;

#INOUT
CREATE PROCEDURE add3(INOUT num INT(20))
BEGINSELECT num;SET num = 111;SELECT num;
END;SET @a = 123;
CALL add3(@a);
SELECT @a;

4.变量

        使用 DECLARE 定义变量(只能在存储过程、函数或触发器中使用)。

        变量赋值:

                1.使用 DEFAULT 默认赋值。

                2.使用 SET 赋值。

                3.使用 SELECT...INTO... 赋值。

DROP PROCEDURE IF EXISTS  add1;
CREATE PROCEDURE add1()
BEGIN#默认值DECLARE a INT(20) DEFAULT 1;DECLARE b INT(20);DECLARE c VARCHAR(255);#使用set为变量赋值SET b = 2;SELECT a;SELECT b;#使用SELECT...INTO...为变量赋值SELECT name INTO c FROM user WHERE id = 1; SELECT c;
END;CALL add1();

        用户变量:

                用于在 SQL 语句和存储过程之间传递数据。

                用法:

                        @变量名

                在使用用户变量之前,最好先初始化它,否则它的值将是 null。

        变量作用域:

                内部变量在其作用域范围内享有更高的优先权,当执行到end时,内部变量消失,不再可见了,在存储过程外再也找不到这个内部变量,但是可以通过out参数或者将其值指派给会话变量来保存其值。

5.调用存储过程
CALL 存储过程名;
6.分隔符

        MySQL默认以";"为分隔符,如果没有声明分割符,则编译器会把存储过程当成SQL语句进行处理,因此编译过程会报错。所以要事先用 "DELIMITER //" 声明当前段分隔符,让编译器把两个 "//" 之间的内容当做存储过程的代码,不会执行这些代码。"DELIMITER ;" 的意为把分隔符还原。

 

3.MySQL存储过程的控制语句

        1.条件语句

                IF-THEN-ELSE语句:

IF 条件 THENSQL语句;
END IF;
CREATE PROCEDURE methods()
BEGINDECLARE a INT;SET a = 1;IF a = 1 THENSELECT a;END IF;
END;CALL methods();

                CASE-WHEN-THEN-ELSE语句:

CASE 变量名WHEN 值1 THENSQL语句;WHEN 值2 THENSQL语句;ELSESQL语句;
END CASE;
CREATE PROCEDURE methods()
BEGINDECLARE a INT;SET a = 1;CASE aWHEN 0 THENSELECT '0',a;WHEN 1 THENSELECT '1',a;ELSESELECT '---',a;END CASE;END;CALL methods();
        2.循环语句

                WHILE-DO...END-WHILE语句:

WHILE 条件 DOSQL语句;
END WHILE;
CREATE PROCEDURE methods()
BEGINDECLARE a INT DEFAULT 0;WHILE a<5 DOINSERT INTO user (name,money) VALUES ('李明',1000);SET a=a+1;END WHILE;
END;CALL methods();

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

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

相关文章

PostgreSQL的前世今生

PostgreSQL的起源可以追溯到1977年的加州大学伯克利分校&#xff08;UC Berkeley&#xff09;的Ingres项目。该项目由著名的数据库科学家Michael Stonebraker领导&#xff0c;他是2015年图灵奖的获得者。以下是PostgreSQL起源的详细概述&#xff1a; 一、早期发展 Ingres项目…

Python自动化会议记录与摘要生成

前言 在现代工作环境中&#xff0c;会议是团队沟通和决策的重要方式。然而&#xff0c;整理会议记录和生成摘要往往是一项耗时且容易出错的任务。幸运的是&#xff0c;借助Python编程语言以及一些强大的库&#xff0c;我们可以自动化这一过程&#xff0c;让机器帮助我们完成这…

大模型训练、微调数据集

MNBVC 地址&#xff1a;https://github.com/esbatmop/MNBVC 数据集说明&#xff1a;超大规模中文语料集&#xff0c;不但包括主流文化&#xff0c;也包括各个小众文化甚至火星文的数据。MNBVC数据集包括新闻、作文、小说、书籍、杂志、论文、台词、帖子、wiki、古诗、歌词、商品…

LabVIEW换流变换器智能巡检系统

基于LabVIEW的换流变换器智能巡检系统通过自动化检测和数据分析&#xff0c;提高换流变换器的运行效率和可靠性&#xff0c;降低人工维护成本。 项目背景&#xff1a; 换流变压器作为电力系统的重要组成部分&#xff0c;其性能的可靠性直接影响到整个电网的稳定运行。然而&…

完美解决phpstudy安装后mysql无法启动

phpstudy数据库无法启动有以下几个原因。 一、自己在电脑上安装了MySQL数据库,MySQL的服务名为MySQL,这会与phpstudy的数据库的服务名发生冲突&#xff0c;从而造成phpstudy中的数据库无法启动&#xff0c;这时我们只需要将自己安装的MySQL的服务名改掉就行。 但是&#xff0…

软件测试的重要一环:「性能测试」怎么做?

性能测试是软件测试中的重要一环&#xff0c;今天给大家介绍性能测试及如何使用RunnerGo完成性能测试任务。 性能测试是什么&#xff1f; 一句话概括&#xff1a;不断地通过不同场景的系统表现去探究系统设计与资源消耗之间的平衡&#xff0c;为开发人员提供消除瓶颈所需的诊…

Android Audio基础——音频混音线程介绍(十)

MixerThread 是 Android 音频输出的核心部分,主要负责将多个音频流混合成一个输出流,通常用于处理多个音频源(如音乐播放器、语音通话、系统提示音等)的混音操作,混音后的音频数据会被发送到音频硬件(如扬声器或耳机)进行最终输出。大多数 Android 的音频都需要经过 Mix…

Ajax:表单 模板引擎

Ajax&#xff1a;表单 & 模板引擎 form 表单form 属性 Ajax操控表单事件监听阻止默认行为收集表单数据 模板引擎art-template{{}}语法原文输出条件输出循环输出过滤器 原理 form 表单 在HTML中&#xff0c;可以通过<form>创建一个表单&#xff0c;收集用户信息。而采…

B/S架构(Browser/Server)与C/S架构(Client/Server)

基本概念 B/S架构&#xff08;Browser/Server&#xff09;&#xff1a;即浏览器/服务器架构。在这种架构中&#xff0c;用户通过浏览器&#xff08;如Chrome、Firefox、Safari等&#xff09;访问服务器上的应用程序。服务器端负责处理业务逻辑、存储数据等核心功能&#xff0c;…

基于docker 部署redis

1、拉取镜像 docker pull redis:latest如果拉取失败可以尝试下配置镜像源&#xff0c;具体参考如下&#xff0c;目前暂可以使用 Docker切换镜像源-CSDN博客 2、创建配置文件 mkdir /usr/local/redis/conf vim redis.conf bind 0.0.0.0#protected-mode no port 6379 tcp-b…

Fast Simulation of Mass-Spring Systems in Rust 论文阅读

参考资料&#xff1a; Fast Simulation of Mass-Spring Systems in Rust 论文阅读&#xff1a;Fast Simulation of Mass-Spring Systems 【论文精读】讲解刘天添2013年的fast simulation of mass spring system(Projective Dynamics最早的论文) Projective Dynamics笔记(一…

面试经典 150 题 第三周代码

【题目链接】 80. 删除有序数组中的重复项 II 【参考代码】 双指针 class Solution { public:int removeDuplicates(vector<int>& nums) {int size nums.size();if(size < 2){return size;}int slow 2, fast 2;while(fast < size){if(nums[slow-2] ! num…

五:Python学习笔记--基础知识(4)字典常用方法

目录 1. get(key, defaultNone) 返回指定键的值&#xff0c;如果键不存在&#xff0c;则返回默认值 2. keys() 返回字典中所有键的视图。 3. values() 返回字典中所有值的视图。 4. items() 返回字典中所有键值对的视图。 5. update(other_dict) 用另一个字典更新当前字典。…

el-table 表格设置必填项

el-table 表格设置必填项 要在 el-table 中集成 el-form 来设置必填项&#xff0c;并进行表单验证&#xff0c;可以使用 Element UI 提供的表单验证功能。下面是一个详细的示例&#xff0c;展示了如何在 el-table 中使用 el-form 来设置必填项&#xff0c;并进行验证。 示例代…

【C++数学 负进制】1017. 负二进制转换|1697

本文涉及知识点 数学 LeetCode1017. 负二进制转换 给你一个整数 n &#xff0c;以二进制字符串的形式返回该整数的 负二进制&#xff08;base -2&#xff09;表示。 注意&#xff0c;除非字符串就是 “0”&#xff0c;否则返回的字符串中不能含有前导零。 示例 1&#xff1a…

avue-crud组件,输入框回车搜索问题

crud组件&#xff0c;输入框回车搜索问题。 文档是并没有标注&#xff0c;实际上已经具备此功能。 需要在curd的option增加属性 searchEnter: true 即可实现输入内容后回车搜索。 avue的一些踩坑记录 - 前端小小菜 - 博客园

【编程语言】Kotlin快速入门 - 伴生对象与懒加载

静态与顶层方法 静态方法&#xff08;伴生对象&#xff09; Java中有静态方法的概念&#xff0c;但是在Kotlin中这个静态方法被弱化了&#xff0c;还记得我们使用object创建一个单例类吗&#xff0c;创建的单例类我们当时可以使用像静态方法一样的调用方式取调用&#xff0c;…

可训练的YOLO距离检测

由于很多场景需要测距&#xff0c;而深度图、点云等获取、配准、融合困难&#xff0c;尝试直接在目标增加距离标注进行训练&#xff0c;理论上标注准确&#xff0c;数据集够&#xff0c;就可以实现。 目前已经跑通YOLO增加距离训练&#xff1a; 目前准度不够&#xff0c;仅将…

零七生活API-文字转语音API使用示例

//官网地址&#xff1a;零七生活API - 提供免费接口调用平台function getAud(){axios({method: get,url: https://api.oick.cn/api/txt?text你好&spd5&apikeyyourApikey,responseType: blob, // 确保 axios 处理为二进制数据}).then((response) > {// 将 Blob 转换…

Flutter Image和Text图文组件实战案例

In this section, we’ll go through the process of building a user interface that showcases a product using the Text and Image widgets. We’ll follow Flutter’s best practices to ensure a clean and effective UI structure. 在本节中&#xff0c;我们将使用“Te…