Mysql 存储过程

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

存储过程和存储函数就是对数据库操作过程中对于反复操作或者比较复杂的sql语句,作成一个方法,可以反复使用。
方法就是函数 function , 有输入、有输出 ,好像没有回调。
这就是同php 一样,把MySQL当作是一门语言来看了,存储过程的语法如下:


1

2

3

4

5

6

7

8

9

10

DELIMITER //                 分隔符

  create procedure simpleproc(IN id int,OUT result1 varchar(100))  //建立储存过程 simpleproc (传入值 名称 类型 ,输出值 名称 类型)

    BEGIN //开始

      select field1,field2 into x,y from table where id=id; //选择字段1,字段2 into 结果1,结果2,从表名,where 条件。

    END

    //

DELIMITER ; //结束

 

call  simpleproc(1,@a); //传入值 为1 , 结果返回到@a @a 就是output.

select @a; // 得到@a 的值


这个方法是没有return 的,因为不是函数,是不是?

1

2

3

4

5

6

7

8

9

10

11

function simpleproc($in)

{

    $a = mysql_query("select xing_ming from xue_sheng where xue_sheng.id=".$in.";");

    if($a){

      return $a

    }else{

      return false;

    }

 

 

}


例:

存储函数里面声明变量和赋值,逻辑判断


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

drop procedure if exists s3; //如果这个存储过程存在的话,则先删除

 

delimiter //

create procedure s3(IN id int(10),OUT result_1 varchar(150))

begin

declare temp_1 int;

declare temp_2 int default 1000;

declare mname varchar(25);

select balance,name into temp_1,mname from member where mid=id;

if temp_1 >= temp_2 then

set result_1 =concat(mname,'大款');

else

set result_1 = '穷人';

end if;

end

//

delimiter ;

 

call s3(1,@a);

call s3(2,@b);

call s3(3,@c);

select @a;

select @b;

select @c;


这样写就完全不需要php来写了,php 只需要mysql_query(“call simpleproc( ‘张三’ ,@a)”) ; 是不是呢?

网上找了存储过程例子,两个存储过程,第二个调用第一个。
第一个是对班级的判断,第二个是插入学生信息。
第二个存储过程中调用了第一个储存过程,并返回值(班级) 。


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

DROP PROCEDURE IF EXISTS `P_GET_CLASS_NAME`;

CREATE PROCEDURE P_GET_CLASS_NAME(IN ID int,OUT NAME VARCHAR(50))

BEGIN

    IF(ID = 1) THEN

          SET NAME = '一班';

    END IF;

    IF(ID = 2) THEN

          SET NAME = '二班';

    END IF;

END;

 

 

DROP PROCEDURE IF EXISTS `P_INSERT_STUDENT`;

CREATE PROCEDURE P_INSERT_STUDENT(IN ID INT,IN NAME VARCHAR(10),IN CLASSNO INT,IN BIRTH DATETIME)

BEGIN

     SET @ID = ID;

     SET @NAME = NAME;

     SET @CLASSNO = CLASSNO;

     SET @BIRTH = BIRTH;

     SET @CLASSNAME = NULL;

     CALL P_GET_CLASS_NAME(@CLASSNO,@CLASSNAME);

    

     SET @insertSql = CONCAT('INSERT INTO TBL_STUDENT VALUES(?,?,?,?)'); //合并sql 语句

     PREPARE stmtinsert FROM @insertSql;

     EXECUTE stmtinsert USING @ID,@NAME,@CLASSNAME,@BIRTH; //给sql 语句值

     DEALLOCATE PREPARE stmtinsert; //这是释放资源了 ,上一句的值

END;

 

CALL P_INSERT_STUDENT(1,'xy',1,'2012-10-01 10:20:01');


显示当前所有存储过程:
#show procedure status;
在PHPmyadmin 中也可以查看,
# drop procedure 存储过程名称;

一旦退出当前mysql ,存储过程还存在,但是call 的结果不在了,也就是@a ,需要重新call 一次,然后再select;.

本文转自 Lee_吉  博客,原文链接:    http://blog.51cto.com/12173069/1947947    如需转载请自行联系原作者
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
存储 Java 关系型数据库
java调用mysql存储过程
在 Java 中调用 MySQL 存储过程主要借助 JDBC(Java Database Connectivity)。其核心原理是通过 JDBC 与 MySQL 建立连接,调用存储过程并处理结果。具体步骤包括:加载 JDBC 驱动、建立数据库连接、创建 CallableStatement 对象、设置存储过程参数并执行调用。此过程实现了 Java 程序与 MySQL 数据库的高效交互。
|
4月前
|
存储 SQL 关系型数据库
[MySQL]存储过程
本文介绍了存储过程的概念、优点和缺点,并通过具体示例详细讲解了存储过程的创建、使用和调用方法。此外,还介绍了游标的定义和使用,帮助读者更好地理解和应用存储过程。文章旨在为读者提供一个学习和使用存储过程的实用指南。
458 18
[MySQL]存储过程
|
4月前
|
存储 SQL NoSQL
|
5月前
|
存储 SQL 关系型数据库
MySql数据库---存储过程
MySql数据库---存储过程
79 5
|
5月前
|
存储 关系型数据库 MySQL
MySQL 存储过程返回更新前记录
MySQL 存储过程返回更新前记录
118 3
|
5月前
|
存储 SQL 关系型数据库
MySQL 存储过程错误信息不打印在控制台
MySQL 存储过程错误信息不打印在控制台
119 1
|
7月前
|
存储 关系型数据库 MySQL
Mysql表结构同步存储过程(适用于模版表)
Mysql表结构同步存储过程(适用于模版表)
79 0
|
7月前
|
存储 SQL 关系型数据库
MySQL 创建存储过程注意项
MySQL 创建存储过程注意项
73 0
|
8月前
|
存储 SQL 关系型数据库
(十四)全解MySQL之各方位事无巨细的剖析存储过程与触发器!
前面的MySQL系列章节中,一直在反复讲述MySQL一些偏理论、底层的知识,很少有涉及到实用技巧的分享,而在本章中则会阐述MySQL一个特别实用的功能,即MySQL的存储过程和触发器。
160 0
|
9月前
|
存储 SQL 关系型数据库
MySQL数据库进阶第四篇(视图/存储过程/触发器)
MySQL数据库进阶第四篇(视图/存储过程/触发器)