服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - Mysql - MySQL存储过程图文实例讲解

MySQL存储过程图文实例讲解

2022-03-09 22:27程裕强 Mysql

虽然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进行标识。

MySQL存储过程图文实例讲解

 

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;

MySQL存储过程图文实例讲解

 

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();

MySQL存储过程图文实例讲解

SELECT * from  demo.test;

MySQL存储过程图文实例讲解

 

总结

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

原文链接:https://blog.csdn.net/chengyuqiang/article/details/122562302

延伸 · 阅读

精彩推荐
  • MysqlNavicat for MySQL定时备份数据库及数据恢复详解

    Navicat for MySQL定时备份数据库及数据恢复详解

    这篇文章主要介绍了Navicat for MySQL定时备份数据库及数据恢复的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 ...

    Eastmount6082020-08-16
  • Mysql为什么MySQL分库分表后总存储大小变大了?

    为什么MySQL分库分表后总存储大小变大了?

    在完成一个分表项目后,发现分表的数据迁移后,新库所需的存储容量远大于原本两张表的大小。 ...

    阿丸笔记4722020-10-29
  • MysqlMysql5.7修改root密码教程

    Mysql5.7修改root密码教程

    今天小编就为大家分享一篇关于Mysql5.7修改root密码教程,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看...

    炫酷飞扬2812019-06-04
  • MysqlMySQL找出未提交事务的SQL实例浅析

    MySQL找出未提交事务的SQL实例浅析

    这篇文章主要给大家介绍了关于MySQL找出未提交事务SQL的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,...

    潇湘隐者11402021-03-14
  • MysqlMySQL 常用命令

    MySQL 常用命令

    有很多朋友虽然安装好了 MySQL 但却不知如何使用它。在这篇文章中我们就从连接 MySQL、修改密码、增加用户等方面来学习一些 MySQL 的常用命令。 ...

    mysql技术网3852019-10-15
  • Mysqlmysql 8.0.21 安装配置方法图文教程

    mysql 8.0.21 安装配置方法图文教程

    这篇文章主要为大家详细介绍了mysql 8.0.21 安装配置方法图文教程,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    FamilyYan5782021-01-23
  • MysqlMySQL绿色版设置编码以及1067错误详解

    MySQL绿色版设置编码以及1067错误详解

    这篇文章主要介绍了MySQL绿色版设置编码,以及1067错误的相关资料,需要的朋友可以参考下...

    marvel__dead4722020-07-27
  • MysqlMySQL事务控制流与ACID特性

    MySQL事务控制流与ACID特性

    本文将会介绍 MySQL 的事务 ACID 特性和 MySQL 事务控制流程的语法,并介绍事务并发处理中可能出现的异常情况,比如脏读、幻读、不可重复读等等,最后介...

    Wallace JW6282021-09-23