mysql数据库存储过程详解

article/2025/10/3 15:15:11

1.什么是存储过程

存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升。

存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。

2.存储过程格式

声明语句结束符,可以自定义:

DELIMITER(定界符) $$    
或
DELIMITER //

声明存储过程:

CREATE PROCEDURE demo_in_parameter(IN p_in int)   
CREATE PROCEDURE 存储过程名(输入符 参数名 参数类型)   

存储过程开始和结束符号:

BEGIN .... 
(内容)
END    

变量赋值:

SET @p_in=1  

变量定义:

DECLARE l_int int unsigned default 4000000; 

实例

mysql> delimiter $$  #将语句的结束符号从分号;临时改为两个$$(可以是自定义)
mysql> CREATE PROCEDURE delete_matches(IN p_playerno INTEGER)-> BEGIN->   DELETE FROM MATCHES->    WHERE playerno = p_playerno;-> END$$
Query OK, 0 rows affected (0.01 sec)mysql> delimiter;  #将语句的结束符号恢复为分号

调用存储过程

call delete_matches(12);
call 函数名(参数);

3.存储过程参数

  • IN 输入参数:表示调用者向存储过程传入值,存储过程中修改该参数的值不能被返回,为默认值
  • OUT 输出参数:表示过程向调用者传出值,在存储过程中可被改变并返回
  • INOUT 输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值,可被改变返回

IN输入实例

DELIMITER //  
CREATE PROCEDURE insert_data(IN a_name string,IN a_age int)  BEGIN   insert into  aware(name,age) values (a_name ,a_age ) ;END//  
DELIMITER ; 

OUT实例

DELIMITER //  
CREATE PROCEDURE out_data(OUT a_name string,OUT a_age int)  BEGIN   select a_name,a_age ;set a_name =1;set a_age=2;select a_name,a_age;END//  
DELIMITER ; 

INOUT实例

mysql> delimiter $$
mysql> create procedure inout_data(inout a_name int)->   begin->     select a_name ;->     set a_name =2;->     select a_name ;->   end-> $$
mysql> delimiter ;mysql> set @a_name =1;mysql> call inout_data(@a_name);
+---------+
| a_name |
+---------+
|       1 |
+---------++---------+
| a_name |
+---------+
|       2 |
+---------+mysql> select @a_name ;
+----------+
| @a_name |
+----------+
|        2 |
+----------+
#调用了inout_data存储过程,接受了输入的参数,也输出参数,改变了变量

4.变量

4.1定义

局部变量声明一定要放在存储过程体的开始:

DECLARE variable_name [,variable_name...] datatype [DEFAULT value];
DECLARE(声明) 变量名[,若干变量名...] 数据类型 [DEFAULT value(默认值)];

4.2赋值

SET @variables_name = 2
SET 变量名 = 表达式值

5.注释

MySQL 存储过程可使用两种风格的注释

两个横杆--:该风格一般用于单行注释。

/* */: 一般用于多行注释。

示例

 create procedure sp1(in p int)comment 'insert into a int value'begin/* 定义一个整形变量 */declare v1 int;/* 将输入参数的值赋给变量 */set v1 = p;/* 执行插入操作 */insert into test(id) values(v1);end//
mysql > DELIMITER //  
mysql > CREATE PROCEDURE proc1 --name存储过程名  -> (IN parameter1 INTEGER)   -> BEGIN   -> DECLARE variable1 CHAR(10);   -> IF parameter1 = 17 THEN   -> SET variable1 = 'birds';   -> ELSE -> SET variable1 = 'beasts';   -> END IF;   -> INSERT INTO table1 VALUES (variable1);  -> END   -> //  
mysql > DELIMITER ;

6.存储过程的修改

6.1 查看存储过程

show procedure status where db='数据库名';或者select routine_name from information_schema.routines where routine_schema='数据库名';或者select name from mysql.proc where db='数据库名';

数据库名可通过以下代码查看

select database();
或者
status;

6.2 修改存储过程

ALTER PROCEDURE

6.3 删除存储过程

DROP PROCEDURE

参考文章

MySQL 存储过程 | 菜鸟教程MySQL 5.0 版本开始支持存储过程。 存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。 存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。 存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。 优点 存储过程可封装,并隐藏复杂的商业逻辑。 存储过程可以回传值,并可以接受..https://www.runoob.com/w3cnote/mysql-stored-procedure.html


http://chatgpt.dhexx.cn/article/HiwmfpRf.shtml

相关文章

MySQL中的存储过程(详细篇)

文章目录 概述优点缺点 MySQL存储过程的定义存储过程的基本语句格式存储过程的使用定义一个存储过程定义一个有参数的存储过程定义一个流程控制语句 IF ELSE定义一个条件控制语句 CASE定义一个循环语句 WHILE定义一个循环语句 REPEAT UNTLL定义一个循环语句 LOOP使用存储过程插…

跨域及cors解决跨域

1.什么是跨域 出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的…

什么是跨域?如何解决跨域?

✨ 目录 🎈 什么是跨域🎈 跨域场景🎈 解决跨域的四种方式 🎈 什么是跨域 域: 是指浏览器不能执行其他网站的脚本跨域: 它是由浏览器的 同源策略 造成的,是浏览器对 JavaScript 实施的安全限制,…

关于跨域后端解决跨域问题

一、为什么会有跨域 出于浏览器的同源策略限制。**同源策略(Sameoriginpolicy)**是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。同源策略会阻止一个域的ja…

什么是跨域?跨域问题怎么解决?

目录 一、什么是跨域? 二、为什么会出现跨域问题? 三、常见的跨域场景 四、跨域解决方法 1、JSONP (1)JSONP原理 (2)JSONP和AJAX对比 (3)JSONP优缺点 (4&#x…

跨域的本质

简介 相信大家在做web系统开发的时候,都遇到过前端页面访问另一个服务器而非本服务器从而遭遇的跨域问题。跨域是个很常见的问题,虽然在web系统中的解决方式很简单,加一段耳熟能详的代码,或者一个注解,或者在某个框架中…

跨域及解决

文章目录 什么是跨域?Origin同源的例子不同源的例子为什么需要跨域?请求跨域了,那么请求到底发出去没有? 如何解决?1.JSONP2.corsa.简单请求b.复杂请求 3.postMessage4.websocket5.nginx6.document.domain Iframe cli…

什么是跨域?以及解决跨域的方法?

【学习什么是跨域,以及如何解决跨域。】 1、什么是跨域?(什么是同源策略?) 跨域: 由于浏览器的同源策略引起的,如果说协议、域名、端口号有任何一个不一样,都会引起跨域 为什么会出…

【跨域】Java后端解决跨域问题

废话不多说,先上完整代码 建corsConfig文件,copy下面内容,放进去 import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.cors.CorsConfigur…

什么是同源策略,什么是跨域,如何解决跨域

1.什么是同源策略? 同源策略/SOP(Same origin policy)是一种约定,由 Netscape 公司 1995 年引入浏览器,它是浏览器最核心也最基本的安全功能,现在所有支持 JavaScript 的浏览器都会使用这个策略。如果缺少…

前端解决跨域----代理跨域

跨域报错: CORS error 为什么会跨域 ​ 先了解跨域的概念:发送请求的url的协议、域名、端口三者之间任意一个与当前页面的地址不同则视为跨域。 解决跨域 vue.config.js 设置代理跨域 module.exports {devServer: {proxy: {/api: {target: "ht…

什么是跨域问题?跨域解决问题

一.为什么会出现跨域问题? 出于浏览器的同源策略限制.同源策略是一种约定,它是浏览器最核心也是最基本的安全功能,如果缺少了同源策略,则浏览器的正常的功能可能会受到影响,跨域收是Web是构建在同源策略基础上的,浏览器只是针对同源策略的一种实现,同源策略会阻止一个域的Jav…

什么是跨域及怎么解决跨域问题?

什么是跨域? 这篇博文解释的挺清楚,我直接引用 什么是跨域?怎么解决跨域问题?_L瑜-CSDN博客_跨域是什么意思 跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器施加的安全…

VUE跨域、常用解决跨域的方法

当我们遇到请求后台接口遇到 Access-Control-Allow-Origin 时,那说明跨域了。 跨域是因为浏览器的同源策略所导致,同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,同源是指&…

什么是跨域?怎么解决跨域问题

文章目录 一、同源策略二、同源策略案例三、什么是跨域四、跨域解决方法1.ajax的jsonp概念核心用法 2.CORS方式3.nginx 转发 一、同源策略 同源策略,是由 Netscape 提出的一个安全策略,它是浏览器最核心也是最基本的安全功能,如果缺少同源策…

什么是跨域以及为什么会出现跨域以及跨域的解决方案

1.什么是跨域? 跨域:指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。 • 同源策略:是指协议,域名,端口都要相同,其中有一个不同都会产…

什么是跨域?如何解决?

一、什么是跨域? 跨域:指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。 例如:a页面想获取b页面资源,如果a、b页面的协议、域名、端口、子域名不同&#xf…

什么是跨域? 出现原因及解决方法

目录 一、什么是跨域二、为什么有跨域问题?三、解决跨域问题的方案1.Jsonp2.nginx3.CORS3.1 什么是cors3.2 原理 四、GateWay网关中实现跨域步骤 一、什么是跨域 跨域:浏览器对于javascript的同源策略的限制 。 同源政策的目的,是为了保证用…

什么是跨域及解决跨域都有哪些方法?

一.同源策略 浏览器为了隔离潜在的恶意文件,使用同源策略,限制从一个源加载的文档或脚本和另一个源的资源进行交互(不同源之间的文档,资源的交互); 通俗的理解:浏览器规定,A 网站的 JavaScript…

什么是跨域,怎么解决跨域?

1.什么是跨域 跨域是指浏览器不能执行其他网站的脚本。它是浏览器同源策略造成的,是浏览器对JS实施的安全限制。 2.常见的跨域场景 3.什么是同源策略? (所谓同源是指:“域名”、“协议”、“端口”均为相同) 同源策略/…