MySQL----存储过程(Stored Procedure)

存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。是具有名字的一段代码,用来完成一个特定的功能。创建的存储过程保存在数据库的数据字典中

存储过程优缺点

优点

  • 存储过程可封装,并隐藏复杂的商业逻辑
  • 存储过程可以回传值,并可以接受参数
  • 存储过程无法使用 SELECT 指令来运行,因为它是子程序,与查看表,数据表或用户定义函数不同
  • 存储过程可以用在数据检验,强制实行商业逻辑等

缺点

  • 存储过程,往往定制化于特定的数据库上,因为支持的编程语言不同。当切换到其他厂商的数据库系统时,需要重写原有的存储过程
  • 存储过程的性能调校与撰写,受限于各种数据库系统

创建存储过程

create procedure 存储过程名(int/out/inout 参数名 参数类型,...)
begin
	存储过程体
end

#例子
DELIMITER //
  CREATE PROCEDURE myproc(OUT s int)
    BEGIN
      SELECT COUNT(*) INTO s FROM students;
    END
    //
DELIMITER ;

分隔符

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

参数

存储过程根据需要可能会有输入、输出、输入输出参数,如果有多个参数用","分割开。MySQL存储过程的参数用在存储过程的定义,共有三种参数类型:

  • IN:参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值
  • OUT:该值可在存储过程内部被改变,并可返回
  • INOUT:调用时指定,并且可被改变和返回

过程体

过程体的开始与结束使用BEGIN与END进行标识。

变量

#声明变量
DECLARE 变量名1[,变量名2...] 数据类型 [默认值];
变量类型

数值类型
数值类型
日期和时间类型日期和时间类型
字符串类型
字符串类型

变量赋值
SET 变量名 = 变量值 [,变量名= 变量值 ...]
用户变量

用户变量一般以@开头
**注意:**滥用用户变量会导致程序难以理解及管理

IN参数例子

DELIMITER //
  CREATE PROCEDURE in_param(IN p_in int)
    BEGIN
    SELECT p_in;
    SET p_in=2;
    SELECT p_in;
    END;
    //
DELIMITER ;

#调用
SET @p_in=1;
CALL in_param(@p_in);
SELECT @p_in;

执行结果:
在这里插入图片描述
以上可以看出,p_in虽然在存储过程中被修改,但并不影响@p_id的值

OUT参数例子

#存储过程OUT参数
DELIMITER //
  CREATE PROCEDURE out_param(OUT p_out int)
    BEGIN
      SELECT p_out;
      SET p_out=2;
      SELECT p_out;
    END;
    //
DELIMITER ;

#调用
SET @p_out=1;
CALL out_param(@p_out);
SELECT @p_out;

执行结果:
在这里插入图片描述

INOUT参数例子

#存储过程INOUT参数
DELIMITER //
  CREATE PROCEDURE inout_param(INOUT p_inout int)
    BEGIN
      SELECT p_inout;
      SET p_inout=2;
      SELECT p_inout;
    END;
    //
DELIMITER ;
#调用
SET @p_inout=1;
CALL inout_param(@p_inout) ;
SELECT @p_inout;

执行结果:
在这里插入图片描述

存储过程的调用

用call和过程名以及一个括号,括号里面根据需要,加入参数,参数包括输入参数、输出参数、输入输出参数

存储过程的查询

#查询存储过程
SELECT name FROM mysql.proc WHERE db='数据库名';
SELECT routine_name FROM information_schema.routines WHERE routine_schema='数据库名';
SHOW PROCEDURE STATUS WHERE db='数据库名';

#查看存储过程详细信息
SHOW CREATE PROCEDURE 数据库.存储过程名;

存储过程的修改

ALTER PROCEDURE 更改用CREATE PROCEDURE 建立的预先指定的存储过程,其不会影响相关存储过程或存储功能

ALTER {PROCEDURE | FUNCTION} sp_name [characteristic ...]
characteristic:
{ CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT 'string'
  • **sp_name:**参数表示存储过程或函数的名称;
  • **characteristic:**参数指定存储函数的特性。
  • **CONTAINS SQL:**表示子程序包含SQL语句,但不包含读或写数据的语句;
  • **NO SQL:**表示子程序中不包含SQL语句;
  • **READS SQL DATA:**表示子程序中包含读数据的语句;
  • **MODIFIES SQL DATA:**表示子程序中包含写数据的语句。
  • **SQL SECURITY { DEFINER | INVOKER }:**指明谁有权限来执行,DEFINER表示只有定义者自己才能够执行;INVOKER表示调用者可以执行
  • **COMMENT ‘string’:**是注释信息。

存储过程的删除

# 从MySQL的表格中删除一个或多个存储过程。
DROP PROCEDURE [过程1[,过程2]]
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL存储过程是在MySQL数据库中创建的一段可重复使用的代码块。它可以接收参数并执行一系列的操作,比如查询数据、插入数据、更新数据等。通过使用存储过程,可以将复杂的逻辑封装起来,使得代码更加模块化和可维护。 要创建一个存储过程,可以按照以下步骤进行操作: 步骤一:创建一个用于测试的数据库。 首先,创建一个名为`storedprocedure_test`的数据库,可以使用以下命令: ```sql create database `storedprocedure_test`; ``` 步骤二:选择使用所创建的数据库。 接下来,选择使用`storedprocedure_test`数据库,使用以下命令: ```sql use storedprocedure_test; ``` 步骤三:创建存储过程。 然后,使用`CREATE PROCEDURE`语句创建存储过程。在创建存储过程时,需要指定存储过程的名称、参数以及要执行的代码。例如,创建一个名为`selectUser`的存储过程,用于查询`user`表中的`u_id`和`username`字段,并返回结果。可以使用以下命令: ```sql DELIMITER // CREATE PROCEDURE selectUser() BEGIN SELECT u_id, username FROM user; END // DELIMITER ; ``` 步骤四:调用存储过程。 最后,可以使用`CALL`语句调用存储过程,以执行其中的代码并返回结果。例如,调用名为`selectUser`的存储过程,可以使用以下命令: ```sql CALL selectUser(); ``` 该命令将返回`u_id`和`username`字段的查询结果。 总结起来,创建和调用MySQL存储过程的步骤如下: 1. 创建用于测试的数据库(步骤一); 2. 选择使用创建的数据库(步骤二); 3. 创建存储过程,并定义参数和执行的代码(步骤三); 4. 调用存储过程,执行其中的代码并返回结果(步骤四)。 引用内容: https://www.runoob.com/w3cnote/mysql-stored-procedure.html 步骤四:创建存储过程并调用 步骤一:创建一个 storedprocedure_test 数据库进行测试<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [MySQL —— Stored Procedure (MySQL存储过程的快速上手与使用 囊括应用案例)](https://blog.csdn.net/fuijiawei/article/details/124914190)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值