【MySQL数据库】存储过程

news/2025/2/22 6:54:00/

目录

  • 一、存储过程
    • 1.1概述
    • 1.2优点
  • 二、存储过程实战
    • 2.1创建存储过程
    • 2.2存储过程的参数
    • 2.3条件语句 if-then-else ···· end if
    • 2.4循环语句while ···· end while

一、存储过程

1.1概述

  • 存储过程是一组为了完成特定功能的SQL语句集合。
  • 存储过程在使用过程中是将常用或者复杂的工作预先使用S1语向写好并用一个将定的名称存储起来,这过程经编译和优化后储无数据库服务器中。当需要使用该存储程时,只需要调用它即可。存储过程在执行上比传统SOL速度更快、执行效率更高

1.2优点

  • 1、执行一次后,会将生成的二进制代码驻留缓冲区,提高执行效率
  • 2、SQL语句加上控制语有的集合,灵活性高
  • 3、在服务器端存储,客户端调用时,降低网络负载
  • 4、可多次重复被调用,可随时修改,不影响客户端调用
  • 5、可完成所有的数据库操作,也可控制数据库的信息访问权限

二、存储过程实战

2.1创建存储过程

创建

DELIMITER $$							#将语句的结束符号从分号;临时改为两个$$(可以是自定义)
CREATE PROCEDURE Proc()					#创建存储过程,过程名为Proc,不带参数
-> BEGIN								#过程体以关键字 BEGIN 开始
-> select * from Store_Info;			#过程体语句
-> END $$								#过程体以关键字 END 结束
DELIMITER ;								#将语句的结束符号恢复为分号

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

CALL Proc;

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

SHOW CREATE PROCEDURE [数据库.]存储过程名;		#查看某个存储过程的具体信息SHOW CREATE PROCEDURE Proc;SHOW PROCEDURE STATUS [LIKE '%Proc%'] \G

在这里插入图片描述

2.2存储过程的参数

  • IN 输入参数:表示调用者向过程传入值(传入值可以是字面量或变量)
  • OUT 输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)
  • INOUT 输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)

in 输入参数

delimiter $$
create procedure proc2(in in_name varchar(20))
begin 
select * from store_info where name = in_name;
end $$
delimiter ;call proc2('钢铁侠');

在这里插入图片描述

out 输出参数

  • 传出值只能是变量

在这里插入图片描述

inout 输入输出参数

  • 值只能是变量
set @my_sales = '钢铁侠';
delimiter $$
create procedure proc4(inout in_hobby varchar(20))
begin 
select hobby into in_hobby from store_info where name = in_hobby;
end $$
delimiter ;
call proc4(@select);
select @select;

在这里插入图片描述
在这里插入图片描述

删除存储过程

  • 存储过程内容的修改方法是通过删除原有存储过程,之后再以相同的名称创建新的存储过程。如果要修改存储过程的名称,可以先删除原存储过程,再以不同的命名创建新的存储过程。
DROP PROCEDURE IF EXISTS Proc;
#仅当存在时删除,不添加 IF EXISTS 时,如果指定的过程不存在,则产生一个错误	

2.3条件语句 if-then-else ···· end if

delimiter $$create procedure proce6 (in in_sum int)beginif in_sum > 250 thenupdate store_info set age=age+10;else update store_info set age=age-10;end if;end $$delimiter ;call proe6(200);

在这里插入图片描述

2.4循环语句while ···· end while

 delimiter $$create procedure proc8() begindeclare i int; #定义一个变量为int类型set i = 1; #定义变量的值create table t1 (id int, name varchar(20)); #创建一个表#开始while循环 当i大于100的时候跳出循环while i <= 100 #开始while循环# 循环插入数据do insert into t1 values (i, concat('file',i));  set i = i + 1; #每次遍历自增一end while;end$$delimiter ;call proc8;

在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/news/551102.html

相关文章

笔记本电量图表显示

step1&#xff1a;打开设置》设备管理器 step2&#xff1a;展开电池&#xff0c;对电池内的项目全部禁用后再启用

笔记本电脑上电量图标显示方法

记录一下笔记本电量小图标显示不出问题的解决方法&#xff1a; 1、打开设备管理器 找到“电池”下的两个子项 2、右键每个子项&#xff0c;选择“禁用设备”后再选择“启用设备”即可显示电池图标

C语言里面那些你必须知道的常用关键字(详细讲解)

前言 哈喽&#xff0c;各位铁汁们好啊&#xff01;✨今天来给大家带来的是C语言中我们常用的关键字静态static的详细讲解和typedef 、#define定义常量和宏。   既然是详解想必大家必定是想学一些平常学不到的东西吧&#xff01;这里博主给大家详细讲解static修饰的变量在内存…

基于灰色预测模型的负荷预测(matlab程序)

0.代码链接 基于灰色预测模型的负荷预测&#xff08;matlab程序&#xff09;资源-CSDN文库 1.简述 灰色预测是一种对含有不确定因素的系统进行预测的方法。灰色预测通过鉴别系统因素之间发展趋势的相异程度&#xff0c;即进行关联分析&#xff0c;并对原始数据进行生成处理来…

android 面试知识点

自我介绍&#xff1a; 您好&#xff0c;我是xxx&#xff0c;从事android开发也有好几年了&#xff0c;总共呆过两家公司&#xff0c;第一家是xx,干了1年&#xff0c;在这家公司做过3个项目&#xff0c;刚开始的时候主要写一些需求文档&#xff0c;用xmind整理项目功能&#xff…

阿里巴巴Java面试题

文章目录 一、基础篇1.1.Java语言有哪些特点1.2.面向对象和面向过程的区别1.3.八种基本数据类型的大小&#xff0c;以及他们的封装类1.4.标识符的命名规则。1.5.instanceof 关键字的作用1.6.Java自动装箱与拆箱1.7.重载和重写的区别1.8.equals与的区别1.9.Hashcode的作用1.10.S…

Android面试知识点_

自我介绍&#xff1a; 您好&#xff0c;我是xxx&#xff0c;从事android开发也有好几年了&#xff0c;总共呆过两家公司&#xff0c;第一家是xx,干了1年&#xff0c;在这家公司做过3个项目&#xff0c;刚开始的时候主要写一些需求文档&#xff0c;用xmind整理项目功能&#xff…

面试总结8

面试问题 1. explain 内容导航 idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra 环境准备 MySQL版本&#xff1a; 创建测试表 CREATE TABLE people( id bigint auto_increment primary key, zipcode char(32) not null default , address varchar(…