http://database.51cto.com/art/201006/203159.htm

我们大家都知道MySQL 存储过程是从 MySQL 5.0 开始逐渐增加新的功能。存储过程在实际应用中也是优点大于缺点。不过最主要的还是执行效率和SQL 代码封装。特别是 SQL 代码封装功能,如果没有存储过程。

在外部程序访问数据库时(例如 PHP),要组织很多 SQL 语句。

特别是业务逻辑复杂的时候,一大堆的 SQL 和条件夹杂在 PHP 代码中,让人不寒而栗。现在有了 MySQL 存储过程,业务逻辑可以封装存储过程中,这样不仅容易维护,而且执行效率也高。

一、MySQL 创建存储过程

“pr_add” 是个简单的 MySQL 存储过程,这个MySQL 存储过程有两个 int 类型的输入参数 “a”、“b”,返回这两个参数的和。

  1. drop procedure if exists pr_add;

计算两个数之和

  1. create procedure pr_add
  2. (
  3. a int,
  4. b int
  5. )
  6. begin
  7. declare c int;
  8. if a is null then
  9. set a = 0;
  10. end if;
  11. if b is null then
  12. set b = 0;
  13. end if;
  14. set c = a + b;
  15. select c as sum;
  16. /*
  17. return c;

不能在 MySQL 存储过程中使用。return 只能出现在函数中。

  1. */
  2. end;

二、调用 MySQL 存储过程

  1. call pr_add(10, 20);

执行 MySQL 存储过程,存储过程参数为 MySQL 用户变量。

  1. set @a = 10;
  2. set @b = 20;
  3. call pr_add(@a, @b);

三、MySQL 存储过程特点

创建 MySQL 存储过程的简单语法为:

  1. create procedure 存储过程名字()
  2. (
  3. [in|out|inout] 参数 datatype
  4. )
  5. begin
  6. MySQL 语句;
  7. end;

MySQL 存储过程参数如果不显式指定“in”、“out”、“inout”,则默认为“in”。习惯上,对于是“in” 的参数,我们都不会显式指定。

1. MySQL 存储过程名字后面的“()”是必须的,即使没有一个参数,也需要“()”

2. MySQL 存储过程参数,不能在参数名称前加“@”,如:“@a int”。下面的创建存储过程语法在 MySQL 中是错误的(在 SQL Server 中是正确的)。 MySQL 存储过程中的变量,不需要在变量名字前加“@”,虽然 MySQL 客户端用户变量要加个“@”。

  1. create procedure pr_add
  2. (
  3. @a int, -- 错误
  4. b int -- 正确
  5. )

3. MySQL 存储过程的参数不能指定默认值。

4. MySQL 存储过程不需要在 procedure body 前面加 “as”。而 SQL Server 存储过程必须加 “as” 关键字。

  1. create procedure pr_add
  2. (
  3. a int,
  4. b int
  5. )
  6. as -- 错误,MySQL 不需要 “as”
  7. begin
  8. mysql statement ...;
  9. end;

5. 如果 MySQL 存储过程中包含多条 MySQL 语句,则需要 begin end 关键字。

  1. create procedure pr_add
  2. (
  3. a int,
  4. b int
  5. )
  6. begin
  7. mysql statement 1 ...;
  8. mysql statement 2 ...;
  9. end;

6. MySQL 存储过程中的每条语句的末尾,都要加上分号 “;”

  1. ...
  2. declare c int;
  3. if a is null then
  4. set a = 0;
  5. end if;
  6. ...
  7. end;

7. MySQL 存储过程中的注释。

  1. /*
  2. 这是个
  3. 多行 MySQL 注释。
  4. */
  5. declare c int; -- 这是单行 MySQL 注释 (注意 -- 后至少要有一个空格)
  6. if a is null then # 这也是个单行 MySQL 注释
  7. set a = 0;
  8. end if;
  9. ...
  10. end;

8. 不能在 MySQL 存储过程中使用 “return” 关键字。

  1. set c = a + b;
  2. select c as sum;
  3. /*
  4. return c; -- 不能在 MySQL 存储过程中使用。return 只能出现在函数中。
  5. */
  6. end;

9. 调用 MySQL 存储过程时候,需要在过程名字后面加“()”,即使没有一个参数,也需要“()”

  1. call pr_no_param();

10. 因为 MySQL 存储过程参数没有默认值,所以在调用 MySQL 存储过程时候,不能省略参数。可以用 null 来替代。

http://www.cnblogs.com/andydao/archive/2013/03/13/2958115.html

息:

show function status;

>创建自定义函数的过程如下demo1:

drop function if exists fn_binary_table;
delimiter //
create function fn_binary_table(
param_1   varchar(50)
)returns int
begin
declare total  int default 0;
select count(*) into total from binary_table where file_type like param_1;
return total;
end;
//
delimiter ;

定义一个输出三个数中最大的数函数:demo2如下:

drop function if exists fn_three_max;
delimiter //
create function fn_three_max(
param_1  double,
param_2  double,
param_3  double
)returns double
begin
 declare max_val double;
 if param_1 > param_2 then
  SET max_val = param_1;
 else
  SET max_val = param_2;
 end if;
 IF param_3>max_val THEN
  SET max_val = param_3;
 END IF;
 return max_val; 
end;
//

调用此函数如下:

select fn_three_max(3,100,90);

简单说明:

mysql中:

declare用户定义一个局部变量

set  用户给变量赋值。

MySQL 存储过程的基本用法相关推荐

  1. mysql的存储过程原理_mysql存储过程原理与用法详解

    本文实例讲述了Mysql存储过程原理与用法.分享给大家供大家参考,具体如下: 本文内容: 什么是存储过程 存储过程的创建 存储过程的使用 查看存储过程 修改存储过程 删除存储过程 首发日期:2018- ...

  2. c# mysql存储过程 输出参数值_MySQL 存储过程参数用法 in, out, inout

    MySQL 存储过程参数有三种类型:in.out.inout.它们各有什么作用和特点呢? 一.MySQL 存储过程参数(in) MySQL 存储过程 "in" 参数:跟 C 语言的 ...

  3. mysql存储过程end_mysql存储过程BEGIN END复合语句用法示例

    mysql存储过程BEGIN END复合语句用法示例 begin_label:] BEGIN [statement_list] END [end_label] 存储子程序可以使用BEGIN ... E ...

  4. MySQL 存储过程传参之in, out, inout 参数用法

    存储过程传参:存储过程的括号里,可以声明参数. 语法是 create procedure p([in/out/inout] 参数名  参数类型 ..) in :给参数传入值,定义的参数就得到了值 ou ...

  5. mysql扩展中如何处理结果集_我们如何处理MySQL存储过程中的结果集?

    我们可以使用游标来处理存储过程中的结果集.基本上,游标允许我们迭代查询返回的一组行并相应地处理每一行. 为了演示在MySQL存储过程中CURSOR的用法,我们基于以下名为" student_ ...

  6. Mysql 分页语句Limit用法

    1.Mysql的limit用法 在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能. Sql代码   SELECT * F ...

  7. mysql存储过程中as_Mysql存储过程中的delimiter

    这个命令与存储过程没什么关系吧. 其实就是告诉mysql解释器,该段命令是否已经结束了,mysql是否可以执行了. 默认情况下,delimiter是分号;.在命令行客户端中,如果有一行命令以分号结束, ...

  8. MySQL存储过程+游标+触发器

    [0]README 0.1)本文旨在 arrange mysql 存储过程及如何在存储中使用游标  的相关知识: 0.2)delimieter的用法:参见 http://blog.csdn.net/p ...

  9. AdoHelper使用MySQL存储过程示例

    AdoHelper是MS DAAB中的一个抽象数据访问类,由它派生出的SqlHelper使用很广泛,PDF.NET数据开发框架内部按照AdoHelper的接口做了一个自己的实现,下面简单说明一下怎么用 ...

最新文章

  1. linux sh for ls,Linux shell for while 循环
  2. 中国未来技术学院盘点
  3. 【DD推荐】还用翻译工具给参数和方法取名?装个插件快速搞定!
  4. 我是如何把 Java 项目移植到 .NET 5.0 的
  5. Go-json解码到接口及根据键获取值
  6. leetcode369. 给单链表加一
  7. 框架源码专题:Mybatis的一级缓存、二级缓存是什么?有什么作用?
  8. OpenShift 4 之Istio-Tutorial (3) 监控微服务运行
  9. 用ISAPI Filter设置HttpOnly属性
  10. 了解 JavaScript 应用程序中的内存泄漏
  11. photos for mather's day
  12. 通过tomcat配置solr 4.10.3
  13. 获取当前时间戳的方法
  14. 微信小程序实现抽奖大转盘
  15. 编写程序,统计某旅馆住宿客人的总数,要求输入客人姓名,输出客人编号(按先后顺序自动生成),姓名以及总人数。...
  16. 笔记本计算机在桌面显示,笔记本电脑显示桌面图标怎么样设置
  17. Maven Helper
  18. 深耕物料处理赛道,宏工科技助力涂料绿色自动化生产
  19. 解决手机QQ邮箱提醒收不到消息
  20. JavaScript的pop()

热门文章

  1. 核心概念——节点/边/Combo——内置节点——Triangle
  2. Netty实战 IM即时通讯系统(六)实战: 客户端和服务端双向通信
  3. 【Linux系统编程】互斥锁
  4. java常见的排序算法_常见排序算法及Java实现
  5. java乒乓_java – 正确实现乒乓游戏
  6. linux脚本数字加,linux-在bash脚本中添加数字表示“未找到”
  7. python表单提交文件_python3做multipart/form-data上传请求
  8. 字符数据类型转换代码
  9. Pixhawk原生固件以往代码版本的下载
  10. C. Commentator problem