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. IIS7构造Gzip压缩

    IIS7构造Gzip压缩 本文来自Kevin Yang博客 作者:Kevin Yang 开启配置HTTP压缩(GZip) 在IIS7中配置Gzip压缩相比IIS6来说实在easy了很多.并且默认情况下 ...

  2. iOS结合导航控制器和标签栏控制器

    <span style="font-family: Arial, Helvetica, sans-serif;"></span><pre name=& ...

  3. PDE_DATA 定义

    PDE_DATA 定义 Location: /fs/proc/internal.h static inline struct proc_dir_entry *PDE(const struct inod ...

  4. ReplaceGoogleCDN:将 Google CDN 更换国家

    Chrome Web Store 安装地址:  https://chrome.google.com/webstore/detail/replace-google-cdn/kpampjmfiopfpkk ...

  5. configure.ac:20: error: Autoconf version 2.65 or higher is required

    安装thrift例如,下面的问题出现: configure.ac:20: error: Autoconf version 2.65 or higher is required wget http:// ...

  6. 在AcGIS随着大数据的生成DEM

    在ArcGIS产生DEM时间.数据来源是经常有的高程点.轮廓线,该高程点.等高线密集,可能有几千万.甚至亿高程点.轮廓线. 如果您使用这些矢量数据生成TIN.不能实现的,由于生成TIN时,支持的最大结 ...

  7. Android - 直线(line)画法

    Android - 直线(line)画法 本文地址: http://blog.csdn.net/caroline_wendy 横线(horizontal line) <View android: ...

  8. IndexReader已解决的问题

    设计和实时搜索的发展,IndexReader饮酒数成为0当调用doClose,和SegmentReader再有一个addCoreClosedListener控制的方法SegmentCoreReader ...

  9. STL中间set具体用法!!!!

    1.关于set C++ STL 之所以得到广泛的赞誉,也被非常多人使用.不仅仅是提供了像vector, string, list等方便的容器,更重要的是STL封装了很多复杂的数据结构算法和大量经常使用 ...

  10. StackExchange.Redis 使用 - 事件(五)

    ConnectionMultiplexer 可以注册如下事件 ConfigurationChanged - 配置更改时 ConfigurationChangedBroadcast - 通过发布订阅更新 ...