MySQL 存储过程是从 MySQL 5.0 新功能。存储过程的长处有一箩筐。只是最基本的还是运行效率和SQL 代码封装。

特别是 SQL 代码封装功能,假设没有存储过程,在外部程序訪问数据库时(比如 PHP),要组织非常多 SQL 语句。特别是业务逻辑复杂的时候,一大堆的
SQL 和条件夹杂在 PHP 代码中,让人不寒而栗。如今有了 MySQL 存储过程,业务逻辑能够封装存储过程中,这样不仅easy维护,并且运行效率也高。

一、MySQL 创建存储过程 

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

drop procedure if exists pr_add;

-- 计算两个数之和

create procedure pr_add

(

   a int,

   b int

)

begin

   declare c int;

if a is null then

      set a = 0;

   end if;

if b is null then

      set b = 0;

   end if;

set c = a + b;

select c as sum;

/*

   return c;- 不能在 MySQL 存储过程中使用。return 仅仅能出如今函数中。

  /

end;

二、调用 MySQL 存储过程 

call pr_add(10, 20);

运行 MySQL 存储过程,存储过程參数为 MySQL 用户变量。

set @a = 10;

set @b = 20;

call pr_add(@a, @b);

三、MySQL 存储过程特点 

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

create procedure 存储过程名字()

(

   [in|out|inout] 參数 datatype

)

begin

   MySQL 语句;

end;

MySQL 存储过程參数假设不显式指定“in”、“out”、“inout”。则默觉得“in”。习惯上。对于是“in” 的參数,我们都不会显式指定。

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

2. MySQL 存储过程參数,不能在參数名称前加“@”。如:mailto:%E2%80%9C@a int”。以下的创建存储过程语法在 MySQL 中是错误的(在 SQL Server 中是正确的)。 MySQL 存储过程中的变量,不须要在变量名字前加“@”,尽管 MySQL
client用户变量要加个“@”。

create procedure pr_add

(

   @a int,- 错误

   b int   - 正确

)

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

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

create procedure pr_add

(

   a int,

   b int

)

as             - 错误,MySQL 不须要 “as”

begin

   mysql statement ...;

end;

5. 假设 MySQL 存储过程中包括多条 MySQL 语句,则须要 begin end keyword。

create procedure pr_add

(

   a int,

   b int

)

begin

   mysql statement 1 ...;

   mysql statement 2 ...;

end;

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

...

declare c int;

if a is null then

      set a = 0;

   end if;

...

end;

7. MySQL 存储过程中的凝视。

/*

     这是个

     多行 MySQL 凝视。

  /

declare c int;    - 这是单行 MySQL 凝视 (注意- 后至少要有一个空格)

if a is null then 这也是个单行 MySQL 凝视

      set a = 0;

   end if;

...

end;

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

set c = a + b;

select c as sum;

/*

   return c;- 不能在 MySQL 存储过程中使用。return 仅仅能出如今函数中。

/

end;

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

call pr_no_param();

10. 由于 MySQL 存储过程參数没有默认值。所以在调用 MySQL 存储过程时候,不能省略參数。能够用 null 来替代。

call pr_add(10, null);

版权声明:本文博客原创文章,博客,未经同意,不得转载。

MySql创建一个存储过程的更多相关文章

  1. 020、MySQL创建一个存储过程,显示存储过程,调用存储过程,删除存储过程

    一.我们创建一个MySQL储存过程,在SQL代码区写入以下内容,并执行就可以了 #编写一个存储过程 CREATE PROCEDURE ShowDate ( ) BEGIN #输出当前时间 SELECT ...

  2. MySQL创建一个用户,指定一个数据库 授权

    Mysql 创建一个用户 hail,密码 hail,指定一个数据库 haildb 给 hail mysql -u root -ppassworduse mysql;insert into user(h ...

  3. 转:mysql 创建一个用户,指定一个数据库

    转自:http://blog.sina.com.cn/s/blog_8c2525390101h0dv.html mysql 创建一个用户 hail,密码 hail,指定一个数据库 haildb 给 h ...

  4. mysql 创建一个用户,指定一个数据库

    mysql 创建一个用户 hail,密码 hail,指定一个数据库 haildb 给 hail mysql -u root -p password use mysql; insert into use ...

  5. 1 创建一个存储过程,以及对存储过程的调用 MySQL

    1  首先创建一张tb1表  sql语句如下 CREATE TABLE `tb1` (  `Id` int(11) NOT NULL AUTO_INCREMENT,  `age` int(11) DE ...

  6. MySQL, 创建一个只读用户和一个所有权限用户

    安装pasa需要配置mysql.基本知识学习一下 http://www.cnblogs.com/mr-wid/archive/2013/05/09/3068229.html MySQL 为关系型数据库 ...

  7. MySQL 创建一个简单的成绩管理系统

    操作过程使用实验楼. 首先是创建一个数据库studentsystem,使用语句是: CREATE DATABASE studentsystem;  查看创建好的数据库的命令还是SHOW DATABAS ...

  8. mysql 让一个存储过程定时作业的代码

    1.在mysql 中建立一个数据库 test1 语句:create database test1 2.创建表examinfo create table examinfo( id int auto_in ...

  9. mysql 让一个存储过程定时作业的代码(转)

    1.在mysql 中建立一个数据库 test1 语句:create database test1 2.创建表examinfo create table examinfo( id int auto_in ...

随机推荐

  1. spring改版官网下载jar包, 源代码和文档

    从网上找了一些方法,现在都整理了一下,有简单粗暴的,也有百转回肠的(详细,直接从官网一步一步的进入下载页),希望大家根据自己的喜好可以找到的真爱. 方法一:(简单粗暴直接) http://repo.s ...

  2. win7/win8通过媒体流(DLNA技术)共享音乐照片和视频

    http://www.jb51.net/os/windows/79421.html 工具/原料 Windows 7/8/10家庭高级版以上版本 家庭WiFi局域网(无须连接互联网) 支持DLNA的手机 ...

  3. 智能家居DIY

    近期智能家居比較火,将房子简单改造下,也算体验智能家居. 本文解说的是用无线的方式,长处是:不用改造现有线路,直接安装模块就可以实现想要的功能,花的钱也较少,共六百左右 =============== ...

  4. 乐在其中设计模式(C#) - 原型模式(Prototype Pattern)

    原文:乐在其中设计模式(C#) - 原型模式(Prototype Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 原型模式(Prototype Pattern) 作者:weba ...

  5. 2015-12-1 Visual Studio 2015 Update 1发布

    http://news.cnblogs.com/n/533856/ 下载地址 文件名 cn_visual_studio_enterprise_2015_with_update_1_x86_x64_dv ...

  6. MonkenRunner通过HierarchyViewer定位控制的方法和建议(Appium/UIAutomator/Robotium侣)

    1. 背景 正在使用MonkeyRunner当我们经常使用Chimchat下面HierarchyViewer模块获得目标控制的一些信息,以协助我们测试.但在MonkeyRunner官方的说法是没有看到 ...

  7. toString()和String.valueof()比较

     toString()和String.valueof()比较 做项目时常常会用到类型转换,比较常用的是toString(),但其实还是用String.valueof()比较好.看源码后他们的区别就更加 ...

  8. (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上

    (1)首先创建java project 选择eclipse菜单上File->New->Java Project. 并命名为UploadFile. (2)加入必要的hadoop jar包 右 ...

  9. hdu4499 Cannon (DFS+回溯)

    转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=4499 Cannon ...

  10. fzu 2150 Fire Game 【身手BFS】

    称号:fzupid=2150"> 2150 Fire Game :给出一个m*n的图,'#'表示草坪,' . '表示空地,然后能够选择在随意的两个草坪格子点火.火每 1 s会向周围四个 ...