Mysql的 存储过程procedure及具体案例

 更新时间:2024年06月09日 11:28:57   作者:cssl-虞老师  
存储过程是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名字和参数(如果有)来执行它,今天通过本文给大家介绍Mysql的 存储过程procedure及具体案例,感兴趣的朋友一起看看吧

什么是存储过程

存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名字和参数(如果有)来执行它。存储过程可以在很多数据库管理系统(DBMS)中找到,如SQL Server、Oracle、MySQL等。

存储过程的好处:

  • 代码重用:存储过程允许你编写一次代码,然后在多个地方重复使用。
  • 简化操作:对于复杂的数据库操作,可以将这些操作封装在存储过程中,用户只需调用存储过程即可。
  • 提高性能:存储过程在首次执行时会进行编译和优化,后续的调用会重用这些编译后的代码,从而提高性能。
  • 安全性:通过存储过程,你可以限制对基础表的直接访问,只允许通过预定义的、受控的接口进行访问。
  • 集中管理:所有的数据库操作逻辑都存储在数据库中,使得管理和维护更加容易

使用存储过程需要注意的是 :

1. declare语句只能放在存储过程的开始位置,放在后面就会报错 
2. if 语句的后面必须有then,但是不需要begin,在if结束时需要end if 
3. 判断是否为NULL倒是和MSSQL一样都有IS NULL 
4. delimiter是定界符的意思在结束的end后面要添加定界符 
5. end if之后必须跟分号,否则语法错误 
6. while后面跟条件,条件后面要跟一个do,在while循环体结束之后需要end while并以分号结束。
7. in 表入参(默认) , out 表出参 , inout 表出入参
8. 两种赋值方式: set ,select into
SELECT id,data INTO x,y FROM test.t1 LIMIT 1;
SET a = 0;

具体案例:

1. 基本案例

--  代码
DELIMITER $$
CREATE PROCEDURE test1(IN ss VARCHAR(100))
BEGIN
   SELECT ss ;
END $$
-- 调用
SET @s1 = '你好' ;
CALL test1(@s1) ;
-- 

2. 带出参案例

--  代码

DELIMITER $$
CREATE PROCEDURE testproce(IN score INT,OUT rs VARCHAR(200))
BEGIN
   DECLARE sc INT;
   SET sc = score ;
   IF sc < 0 OR sc > 100 THEN
      SET rs = 'score error';
   ELSEIF sc > 80 THEN
      SET rs = 'A';
   ELSEIF sc > 60 THEN
      SET rs = 'B';
   ELSE
      SET rs = 'C';
   END IF ;
END $$
-- 调用
SET @a1 =60;
SET @a2 = '';
CALL testproce(@a1,@a2);
SELECT @a2 ;
-- 

3.while的简单应用

--  代码

DELIMITER $$
CREATE PROCEDURE proc_add_looply(IN $className VARCHAR(200),INOUT $insertTimes INT)
BEGIN
    WHILE $insertTimes>0 DO
        INSERT INTO classes VALUES(DEFAULT,$className);
        SET $insertTimes = $insertTimes - 1 ;
    END WHILE;
    COMMIT;
END $$
-- 调用
SET @lp_1 = '班' ;
SET @lp_2 = 5 ;
CALL proc_add_looply(@lp_1,@lp_2);
--

4.用数据库中的数据赋值

--  代码

DELIMITER $$
CREATE PROCEDURE show_job_dept(IN no2 INT,OUT job2 VARCHAR(100),OUT dno2 INT)
BEGIN
    SELECT job,deptno INTO job2,dno2 FROM emp WHERE EMPNO = no2;
END $$
-- 调用
SET @sjd_1 = 7369;
SET @sjd_2 = '';
SET @sjd_3 = 0;
CALL show_job_dept(@sjd_1,@sjd_2,@sjd_3);
SELECT @sjd_2 ;
SELECT @sjd_3 ;
--

到此这篇关于Mysql的 存储过程(procedure)的文章就介绍到这了,更多相关Mysql 存储过程内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL备份与恢复之冷备(1)

    MySQL备份与恢复之冷备(1)

    这篇文章主要介绍了MySQL备份与恢复之冷备,冷备一般需要定制计划,比如什么时候做备份,每次对哪些数据进行备份等等,对冷备感兴趣的小伙伴们可以参考一下
    2015-08-08
  • 一文带你了解MySQL中的事务

    一文带你了解MySQL中的事务

    事务处理可以用来维护数据库的完整性,保证成批的sQL语句要么全部执行,要么全部不执行。本文将通过一些简单的示例带大家了解一下MySQL中的事务,希望对大家有所帮助
    2023-02-02
  • Scott 数据 映射 MySQL代码实现分享

    Scott 数据 映射 MySQL代码实现分享

    这篇文章主要介绍了Scott 数据 映射 MySQL,文章围绕Scott 数据 映射 MySQL的相关代码分享给大家,具有一定的参考价值,需要的小伙伴可以参考一下,希望对你的学习有所帮助
    2022-02-02
  • Starting MySQL.Manager of pid-file quit without updating file.[FAILED]的解决方法

    Starting MySQL.Manager of pid-file quit without updating fil

    因为硬盘满了,Starting MySQL.Manager of pid-file quit without updating file.[FAILED]
    2010-02-02
  • MySQL8.0内存相关参数总结

    MySQL8.0内存相关参数总结

    这篇文章主要介绍了MySQL8.0内存相关参数总结,帮助大家更好的理解和学习mysql,感兴趣的朋友可以了解下
    2020-08-08
  • MySQL数据库命令

    MySQL数据库命令

    这篇文章主要介绍了数据库的常用命令,数据库中对表的命令以及一些常用的数据库查询和常用函数,感兴趣的小伙伴可以借鉴一下
    2023-03-03
  • MySQL/MariaDB 如何实现数据透视表的示例代码

    MySQL/MariaDB 如何实现数据透视表的示例代码

    这篇文章主要介绍了MySQL/MariaDB 如何实现数据透视表的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • MySQL四种日志binlog/redolog/relaylog/undolog详解

    MySQL四种日志binlog/redolog/relaylog/undolog详解

    undo log主要存储的也是逻辑日志,比如我们要insert一条数据了,那undo log会记录的一条对应的delete日志,我们要update一条记录时,它会记录一条对应相反的update记录,这篇文章主要介绍了MySQL四种日志binlog/redolog/relaylog/undolog,需要的朋友可以参考下
    2024-08-08
  • Mysql语法、特殊符号及正则表达式的使用详解

    Mysql语法、特殊符号及正则表达式的使用详解

    这篇文章主要介绍了Mysql语法、特殊符号及正则表达式的使用详解,文中包括mysql常用显示命令,索引使用规则等知识点,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-11-11
  • Mysql中通用表达式WITH AS语句的使用实例代码

    Mysql中通用表达式WITH AS语句的使用实例代码

    with as也叫子查询,用来定义一个sql片段,且该片段会被整个sql语句反复使用很多次,这个sql片段就相当于是一个公用临时表,下面这篇文章主要给大家介绍了关于Mysql中通用表达式WITH AS语句使用的相关资料,需要的朋友可以参考下
    2022-08-08

最新评论