MySQL存储过程图文实例讲解

 更新时间:2022年03月09日 15:56:27   作者:程裕强  
虽然MySQL的存储过程一般情况下是不会使用到的,但是在一些特殊场景中,还是有需求的,下面这篇文章主要给大家介绍了关于MySQL存储过程的相关资料,需要的朋友可以参考下

MySQL的存储过程

存储过程是数据库的一个重要的功能,MySQL 5.0以前并不支持存储过程,这使得MySQL在应用上大打折扣。好在MySQL 5.0开始支持存储过程,这样即可以大大提高数据库的处理速度,同时也可以提高数据库编程的灵活性。

MySQL存储过程的创建

语法

CREATE PROCEDURE  过程名([[IN|OUT|INOUT] 参数名 数据类型[,[IN|OUT|INOUT] 参数名 数据类型…]]) [特性 ...] 过程体

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

分隔符

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

参数

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

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

过程体

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

1、简单实例

create procedure demo.p_test1()
begin
  -- 使用 declare语句声明一个变量
  declare id int default 0;
  declare name varchar(50) default '';
  -- 使用set语句给变量赋值
  set id=7521;
  -- 将users表中id=1的名称赋值给username
  select ename into name from demo.emp where empno=id;
  -- 返回变量
  select name;
end;

2、通过游标遍历结果集

create table demo.test(
	id int,
	cnt varchar(50)
)
create procedure demo.p_test2()
-- 通过游标遍历结果集
begin
  -- 声明变量
  declare id int default 0;
  declare name varchar(50) default '';
  declare done boolean default 1;
  -- 声明游标
  declare rs cursor for SELECT deptno,dname from demo.dept ;
  -- 定义异常:
  declare continue handler for SQLSTATE '02000' SET done = 0; 
  -- 打开游标
  open rs;
  delete from demo.test;
  while done do 
  	begin
	  fetch rs into id,name;
      INSERT into demo.test SELECT e.deptno,count(1) from demo.emp e WHERE e.deptno =id group by e.deptno;
     end ;
  end while;
  -- 关闭游标
  close rs;
end;
call demo.p_test2();

SELECT * from  demo.test;

总结 

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

相关文章

  • My Sql 1067错误与编码问题的解决方案

    My Sql 1067错误与编码问题的解决方案

    My Sql 大部分都是用绿色版(解压版) 然后注册服务简单方便,但是配置文件也很让人纠结,下面小编给大家带来了My Sql 1067错误与编码问题的解决方案,感兴趣的朋友参考下吧
    2016-11-11
  • mysql中取字符串中的数字的语句

    mysql中取字符串中的数字的语句

    在很多时间我们需要把字符串的数字给取出来,通常大家会用php,asp等这类来操作,本文章介绍了在sql中取字符中的数字办法,有需要的朋友可以参考一下
    2012-04-04
  • MySQL实现每天定时12点弹出黑窗口

    MySQL实现每天定时12点弹出黑窗口

    这篇文章主要介绍了MySQL实现每天定时12点弹出黑窗口问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • 解决MySQL因不能创建临时文件而导致无法启动的方法

    解决MySQL因不能创建临时文件而导致无法启动的方法

    这篇文章主要跟大家介绍了关于解决MySQL因不能创建临时文件而导致无法启动的方法,文中通过示例代码介绍了详细的解决方法,对大家具有一定的的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-06-06
  • MySQL中show命令方法得到表列及整个库的详细信息(精品珍藏)

    MySQL中show命令方法得到表列及整个库的详细信息(精品珍藏)

    MySQL中show 句法得到表列及整个库的详细信息,方便查看数据库的详细信息。
    2010-11-11
  • mysql中update按照多重条件进行更新处理的方案

    mysql中update按照多重条件进行更新处理的方案

    更新数据是使用数据库时最重要的任务之一,下面这篇文章主要给大家介绍了关于mysql中update按照多重条件进行更新处理的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • MySQL 5.6 GTID新特性实践

    MySQL 5.6 GTID新特性实践

    GTID(Global Transaction ID)是对于一个已提交事务的编号,并且是一个全局唯一的编号。下文给大家介绍MySQL 5.6 GTID新特性实践,感兴趣的朋友一起看看吧
    2016-10-10
  • InnoDB实现序列化隔离级别的方法

    InnoDB实现序列化隔离级别的方法

    这篇文章主要介绍了InnoDB实现序列化隔离级别的方法,文中介绍的非常详细,相信对大家学习或者使用InnoDB具有一定的参考价值,需要的朋友们可以参考学习,下面来一起看看吧。
    2017-04-04
  • MySQL sleep函数使用方法详解

    MySQL sleep函数使用方法详解

    sleep函数时「延时」指定时间(单位秒),也就是让程序停止执行一段指定的时间,本文就给大家简单的介绍一下MySQL sleep函数使用方法,需要的朋友可以参考下
    2023-07-07
  • MYSQL大小写不敏感导致用户登录异常问题

    MYSQL大小写不敏感导致用户登录异常问题

    这篇文章主要介绍了MYSQL大小写不敏感导致用户登录异常问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04

最新评论