mysql如何创建存储过程

存储过程(stored procedure):一组可编程的函数,是为了完成特定功能的sql语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。

推荐课程:MySQL教程。

mysql如何创建存储过程

优点(为什么要用存储过程?):

①将重复性很高的一些操作,封装到一个存储过程中,简化了对这些SQL的调用

②批量处理:SQL+循环,减少流量,也就是“跑批”

③统一接口,确保数据的安全

相对于oracle数据库来说,MySQL的存储过程相对功能较弱,使用较少。

一、存储过程的创建和调用

  >存储过程就是具有名字的一段代码,用来完成一个特定的功能。

  >创建的存储过程保存在数据库的数据字典中。

1、创建存储过程

CREATE    [DEFINER = { user | CURRENT_USER }] PROCEDURE sp_name ([proc_parameter[,...]])    [characteristic ...] routine_bodyproc_parameter:    [ IN | OUT | INOUT ] param_name typecharacteristic:    COMMENT 'string'  | LANGUAGE SQL  | [NOT] DETERMINISTIC  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }  | SQL SECURITY { DEFINER | INVOKER }routine_body:  Valid SQL routine statement[begin_label:] BEGIN  [statement_list]    ……END [end_label]

#创建数据库,备份数据表用于示例操作

mysql> create database db1;mysql> use db1;    mysql> create table PLAYERS as select * from TENNIS.PLAYERS;mysql> create table MATCHES  as select * from TENNIS.MATCHES;

示例:创建一个存储过程,删除给定球员参加的所有比赛

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 ;  #将语句的结束符号恢复为分号

解析:

默认情况下,存储过程和默认数据库相关联,如果想指定存储过程创建在某个特定的数据库下,那么在过程名前面加数据库名做前缀;

在定义过程时,使用DELIMITER $$ 命令将语句的结束符号从分号 ; 临时改为两个$$,使得过程体中使用的分号被直接传递到服务器,而不会被客户端(如mysql)解释。

二、存储过程的参数

  存储过程可以有0个或多个参数,用于存储过程的定义。

存了个图 存了个图

视频图片解析/字幕/剪辑,视频高清保存/图片源图提取

存了个图 17 查看详情 存了个图

3种参数类型:

IN输入参数:表示调用者向过程传入值(传入值可以是字面量或变量)

OUT输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)

INOUT输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)

1、in输入参数

mysql> delimiter $$mysql> create procedure in_param(in p_in int)    -> begin    ->   select p_in;    ->   set p_in=2;    ->    select P_in;    -> end$$mysql> delimiter ;mysql> set @p_in=1;mysql> call in_param(@p_in);+------+| p_in |+------+|    1 |+------++------+| P_in |+------+|    2 |+------+mysql> select @p_in;+-------+| @p_in |+-------+|     1 |+-------+

#以上可以看出,p_in在存储过程中被修改,但并不影响@p_id的值,因为前者为局部变量、后者为全局变量。

2、out输出参数

mysql> delimiter //mysql> create procedure out_param(out p_out int)    ->   begin    ->     select p_out;    ->     set p_out=2;    ->     select p_out;    ->   end    -> //mysql> delimiter ;mysql> set @p_out=1;mysql> call out_param(@p_out);+-------+| p_out |+-------+|  NULL |+-------+  #因为out是向调用者输出参数,不接收输入的参数,所以存储过程里的p_out为null+-------+| p_out |+-------+|     2 |+-------+mysql> select @p_out;+--------+| @p_out |+--------+|      2 |+--------+  #调用了out_param存储过程,输出参数,改变了p_out变量的值

3、inout输入参数

mysql> delimiter $$mysql> create procedure inout_param(inout p_inout int)    ->   begin    ->     select p_inout;    ->     set p_inout=2;    ->     select p_inout;    ->   end    -> $$mysql> delimiter ;mysql> set @p_inout=1;mysql> call inout_param(@p_inout);+---------+| p_inout |+---------+|       1 |+---------++---------+| p_inout |+---------+|       2 |+---------+mysql> select @p_inout;+----------+| @p_inout |+----------+|        2 |+----------+

#调用了inout_param存储过程,接受了输入的参数,也输出参数,改变了变量

注意:

①如果过程没有参数,也必须在过程名后面写上小括号

    例:CREATE PROCEDURE sp_name ([proc_parameter[,…]]) ……

②确保参数的名字不等于列的名字,否则在过程体中,参数名被当做列名来处理

强烈建议:

>输入值使用in参数;

>返回值使用out参数;

>inout参数就尽量的少用。

以上就是mysql如何创建存储过程的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/369973.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
java有哪些数组集合
上一篇 2025年11月6日 07:14:45
冯骥杨奇谈《黑神话:钟馗》 放开手脚从零开始
下一篇 2025年11月6日 07:14:51

相关推荐

  • mysql中5.6和5.5有什么区别

    mysql中5.6和5.5有什么区别mysql中5.6和5.5有什么区别mysql中5.6和5.5有什么区别mysql中5.6和5.5有什么区别

    区别:1、在5.5版本中主从配置不能省略binlog和POS两个参数,而在5.6版本中这两个参数可以省略;2、在5.5版本中不支持多线程复制,同步复制是单线程、队列的,而在5.6版本中支持多线程复制。 本教程操作环境:windows10系统、mysql8.0.22版本、Dell G3电脑。 mysq…

    2026年9月1日 用户投稿
    000
  • MySQL如何实现实时数据同步_跨机房数据同步方案?

    MySQL如何实现实时数据同步_跨机房数据同步方案?MySQL如何实现实时数据同步_跨机房数据同步方案?MySQL如何实现实时数据同步_跨机房数据同步方案?MySQL如何实现实时数据同步_跨机房数据同步方案?

    mysql实时数据同步在跨机房场景下的核心方案包括:1. 基于binlog的复制,通过slave节点读取master的binlog实现同步,优点稳定但受网络和负载影响;2. 基于gtid的复制,简化管理但需mysql 5.6+支持;3. mysql group replication,提供高可用但资…

    2026年9月1日 用户投稿
    000
  • mysql中union的用法是什么

    mysql中union的用法是什么mysql中union的用法是什么mysql中union的用法是什么mysql中union的用法是什么

    mysql中,union用于将多个select语句的结果组合到一个结果集中,并删除结果集中的重复数据,语法为“select column,…from table1 union select column,…from table2”。 本教程操作环境:windows10系统、m…

    2026年9月1日 用户投稿
    100
  • mysql与db2的区别是什么

    mysql与db2的区别:1、mysql可以对最小单元的对象批量进行授权,而db2不可以对最小单元的对象批量进行授权;2、mysql支持在恢复时打开数据库,而db2不支持在恢复时打开数据库。 本教程操作环境:windows10系统、mysql8.0.22版本、Dell G3电脑。 mysql与db2…

    2026年9月1日
    100
  • mysql编码怎么修改为utf8

    mysql编码修改为utf8的方法:1、打开并修改mysql配置文件“my.ini”;2、在“mysqld”标签下添加“default-character-set = utf8”;3、重新启动mysql服务即可。 本教程操作环境:windows10系统、mysql8.0.22版本、Dell G3电脑…

    2026年9月1日
    000
  • mysql中5.6与5.7有什么区别

    mysql中5.6与5.7的区别:1、5.7版本提供了json格式数据,而5.6版本没有提供json版本数据;2、5.7版本支持多主一从,而5.6版本不支持多主一从;3、5.7版本初始化数据时在bin目录下,而5.6版本在script目录。 本教程操作环境:windows10系统、mysql8.0.…

    2026年9月1日
    100
  • 如何利用MySQL唯一索引和分布式锁/数据库锁防止特定时间段内的数据重复插入?

    如何利用MySQL唯一索引和锁机制避免特定时间段内的数据重复插入? 本文探讨如何防止在特定时间范围内(例如10:15-11:15)向MySQL数据库插入重复数据。直接使用MySQL唯一索引无法完全解决此问题,因为时间戳是动态变化的。 解决方案: 1. 高效方案:利用分布式锁(例如Redis) 对于高…

    2026年9月1日
    100
  • mysql中–是啥意思

    在mysql中,“–”是注释符,是单行注释的意思,该注释符后需要添加一个空格注释才能生效,语法为“– 注释内容”;该注释符与“#”注释符都用于单行注释,区别就是“#”注释符后不需要添加空格。 本教程操作环境:windows10系统、mysql8.0.22版本、Dell G3电…

    2026年9月1日
    000
  • mysql视图有索引吗

    mysql中视图没有索引。视图是一张虚拟的表,并不真实的存在于数据库中,所以也就没有主键、索引,因为视图没有行和列,本质上就是语句,当调用视图时系统先执行生成视图的语句,然后在视图的基础上进行查询。 本教程操作环境:windows10系统、mysql8.0.22版本、Dell G3电脑。 mysql…

    2026年9月1日
    100
  • MySQL唯一索引如何实现基于时间段的约束?

    MySQL如何实现基于时间段的唯一索引约束? 如何在MySQL中创建唯一索引,以确保同一时间段内只允许插入一条记录?直接用索引无法实现,但我们可以通过以下两种方法解决: 方法一:利用分布式锁(高频数据场景推荐) 此方法适合数据插入频率较高的场景。 流程如下: 使用Redis等分布式锁服务。插入数据前…

    2026年9月1日
    100
  • MySQL数据库基础知识点储备(整理总结)

    本篇文章给大家带来了关于mysql数据库的相关知识,主要整理了数据库基础的一下知识点,包括索引、语法顺序、执行顺序、存储过程等等相关问题,希望对大家有帮助。 推荐学习:mysql教程 一、数据库 1.1 事务 1.1.1 事务四个特性(ACID) 原子性 (Atomicity) 整个事务中的所要操作…

    2026年9月1日
    100
  • MySQL你必须要了解存储引擎

    MySQL你必须要了解存储引擎MySQL你必须要了解存储引擎MySQL你必须要了解存储引擎MySQL你必须要了解存储引擎

    本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了存储引擎的相关问题,还包括了索引设计与使用、数据类型选择以及字符集设置等问题,希望对大家有帮助。 推荐学习:mysql教程 谁说MySQL查询千万级别的数据很拉跨?我今天就要好好的和你拉拉家常,畅谈到深夜,一起过除夕!这篇文章也是年前的最后…

    2026年9月1日 用户投稿
    400
  • 归纳详解MySQL知识点之表结构

    归纳详解MySQL知识点之表结构归纳详解MySQL知识点之表结构归纳详解MySQL知识点之表结构归纳详解MySQL知识点之表结构

    本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了表结构包括了约束条件以及修改表结构的相关问题,希望对大家有帮助。 推荐学习:mysql教程 约束条件 作用是限制如何给字段赋值 查看约束条件 mysql> desc 库名.表名; mysql> desc db1.t9; //如图…

    2026年9月1日 用户投稿
    600
  • 一文详解MySQL中的事务和 MVCC 原理

    一文详解MySQL中的事务和 MVCC 原理一文详解MySQL中的事务和 MVCC 原理一文详解MySQL中的事务和 MVCC 原理一文详解MySQL中的事务和 MVCC 原理

    本篇文章带大家了解一下mysql中的事务,并介绍一下mvcc 原理,希望能够给大家提供帮助! 01 什么是事务? 数据库事务指的是一组数据操作,事务内的操作要么就是全部成功,要么就是全部失败,什么都不做,其实不是没做,是可能做了一部分但是只要有一步失败,就要回滚所有操作,有点一不做二不休的意思。 在…

    2026年9月1日 用户投稿
    100
  • mysql报错注入是什么

    在mysql中,报错注入就是指通过页面报出的错误信息,构造合适的语句来获取想要的数据;应用系统未关闭数据库报错函数,可以使用extractvalue()函数,从目标XML中返回包含所查询值的字符串。 本教程操作环境:windows10系统、mysql8.0.22版本、Dell G3电脑。 mysql…

    2026年9月1日
    400
  • mysql怎么给查询加序号

    在mysql中,可以利用SELECT语句定义用户变量给查询结果添加序号,语法为“SELECT 字段1,字段2,(@i:=@i+1) AS ‘序号’ FROM 表名,(SELECT @i:=0) AS itable;”。 本教程操作环境:windows10系统、mysql8.0…

    2026年9月1日
    400
  • mysql嵌套查询语句是什么

    在mysql中,嵌套查询表示在一个SELECT语句的WHERE子句或HAVING子句中嵌套另一个SELECT语句的查询,也叫作子查询,语法为“SELECT语句 WHERE 条件(SELECT语句)”。 本教程操作环境:windows10系统、mysql8.0.22版本、Dell G3电脑。 mysq…

    2026年9月1日
    200
  • mysql怎么删除分区

    在mysql中,可以利用alter语句配合“DROP PARTITION”来删除分区,“DROP PARTITION”的作用就是用于删除指定的分区,语法为“ALTER TABLE ‘表名’ DROP PARTITION ‘分区名’ ”。 本教程操作环境…

    2026年9月1日
    100
  • MySQL的Explain执行计划怎么看_关键指标如何理解?

    MySQL的Explain执行计划怎么看_关键指标如何理解?MySQL的Explain执行计划怎么看_关键指标如何理解?MySQL的Explain执行计划怎么看_关键指标如何理解?MySQL的Explain执行计划怎么看_关键指标如何理解?

    mysql的explain执行计划用于分析sql语句的执行方式,帮助优化查询性能。1. id字段表示执行顺序,值越大优先级越高;2. select_type表示查询类型,如simple、primary、subquery等;3. type显示查找方式,最佳为const、eq_ref,最差为all;4.…

    2026年9月1日 用户投稿
    200
  • 什么是MVCC,为什么要设计间隙锁?

    本篇文章带大家了解一下mvcc,介绍一下mvcc与隔离级别的关系,从设计的角度上,聊聊为什么要设计出mvcc,且rc和rr的隔离级别到底有什么不同。 MVCC作用 MVCC使得大部分支持行锁的事务引擎,不再单纯的使用行锁来进行数据库的并发控制,而是把数据库的行锁和行的版本号结合起来,只需要很小的开销…

    用户投稿 2026年9月1日
    100

发表回复

登录后才能评论
关注微信