一、存储过程概念


  使用SQL编写访问数据库的代码时,可用两种方法存储和执行这些代码,一种是在客户端存储代码,并创建向数据库服务器发送的SQL命令(或SQL语句),比如在C#、Java等客户端编程语言中嵌入访问数据库的SQL语句;另一种是将SQL语句存储在数据库服务器端(实际是存储在具体的数据库中,作为数据库的一个对象),然后由应用程序调用执行这些SQL语句。

  这些存储在数据库服务器端供客户端调用执行的SQL语句就是存储过程,客户端应用程序可以直接调用并执行存储过程,存储过程的执行结果可返回给客户端。

  存储过程可以:

  • 接受输入参数并以输出参数的形式将多个值返回给调用者。
  • 包含执行数据库操作的语句。
  • 将查询语句执行结果返回到客户端内存中。

  总之,存储过程实际是存储在数据库服务器上的、由SQL语句和流程控制语句组成的预编译集合,它以一个名字存储并作为一个单元处理,可由应用程序调用执行,允许包含控制流、逻辑以及对数据的查询等操作。存储过程可以接受输入参数,并可具有输出参数,还可以返回单个或多个结果集。

二、创建存储过程


create procedure 过程名字(参数列表)
begin
--过程体
end

  简单实例:

三、查看存储过程


show procedure status [like'procedure_name'];

  简单实例:

  其中'\G'表示:以每组显示查询结果

  查看创建语句:

show create procedure procedure_name;

四、调用存储过程


  不能用select来访问存储过程:

  调用存储过程应该用 call:

五、修改&删除存储过程


  存储过程不能修改,只能删除后在添加

drop procedure 存储过程名;

六、存储过程参数


  函数的参数需要数据类型指定,过程比函数更严格

  过程还有自己的类型限定:

  • in:数据只是从外部传入给内部使用(值传递),可以是数值也可以是变量
  • out:只允许过程内部使用,只能传递变量,引用传递,外部的数据会被先清空才会进入到内部
  • inout:外部可以在内部使用,内部修改也可以在外部使用,引用传递,只能传递变量

  in参数为值传递

  out参数为引用传递,传递至过程中,会将传递参数的本身值清空

  inout参数为引用传递

  实例:

    delimiter $$
create procedure pro2(in int_1 int,out int_2 int,inout int_3 int)
begin
-- 查看三个变量
select int_1,int_2,int_3;
end
$$
delimiter ;

    delimiter $$
create procedure pro3(in int_1 int,out int_2 int,inout int_3 int)
begin
-- 查看三个局部变量;
select int_1,int_2,int_3; -- 修改三个局部变量;
set int_1 = 10;
set int_2 = 100;
set int_3 = 1000; -- 查看三个局部变量
select int_1,int_2,int_3; -- 查看三个全局变量
select @int_1,@int_2,@int_3; --修改三个全局变量
set @int_1 = 'a';
set @int_2 = 'b';
set @int_3 = 'c';
--查看三个全局变量
select @int_1,@int_2,@int_3;
end
$$
delimiter ;

七、跳出存储过程


  怎么像return一样自如地跳出存储过程呢?

  通过LEAVE实现。

DELIMITER $$
create PROCEDURE test4(IN char_1 CHAR,INOUT char_2 CHAR)
back:BEGIN
IF char_1 = 'c' THEN
SET char_2 = 'e';
LEAVE back;
END IF;
IF char_1 = 'a' THEN
SET char_2 = 'q';
LEAVE back;
END IF;
IF char_1 = 'a' THEN
set char_2 = 'r';
LEAVE back;
END IF;
END
$$
DELIMITER ;

  实例:

一天一点MySQL复习——存储过程的更多相关文章

  1. 一天一点MySQL复习——获取数据库系统时间、变量赋值、变量比较

    一.SQL获取系统时间 mysql> select now() from dual; +---------------------+ | now() | +------------------- ...

  2. mysql之存储过程

    一.存储过程     迄今为止,使用的大多数 SQL语句都是针对一个或多个表的单条语句.并非所有操作都这么简单,经常会有一个完整的操作需要多条语句才能完成.例如,考虑以下的情形.         1. ...

  3. MySQL的存储过程1

    来源:http://blog.sina.com.cn/s/blog_52d20fbf0100ofd5.html MySQL的存储过程 2. 关于MySQL的存储过程存储过程是数据库存储的一个重要的功能 ...

  4. Mysql的存储过程(以Mysql为例进行讲解)

       我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储 在数据库中,用户通过指定存 ...

  5. MYSQL:基础—存储过程

    MYSQL:基础-存储过程 快速入门 理解: 迄今为止,我们学过的大多数SQL语句都是针对一个或多个表的单条语句.但是并不是所有的操作都是可以用一条语句来完成的,经常有一些操作是需要多条语句配合才能完 ...

  6. MYSQL复习笔记9-存储过程

    date: 20140208auth: Jin参考引用:http://blog.sina.com.cn/s/blog_52d20fbf0100ofd5.html mysql存储过程详解一.基本介绍1. ...

  7. mySQL的存储过程详解

    mysql存储过程详解 1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的S ...

  8. JDBC对MySQL数据库存储过程的调用

    一.MySQL数据库存储过程: 1.什么是存储过程 存储过程(英文:Stored Procedure)是在大型数据库系统中,为了完成特定功能而编写的一组的SQL语句集.存储过程经编译存储在数据库中,用 ...

  9. MYSQL中存储过程的创建,调用及语法

    MySQL 存储过程是从 MySQL 5.0 开始增加的新功能.存储过程的优点有一箩筐.不过最主要的还是执行效率和SQL 代码封装.特别是 SQL 代码封装功能,如果没有存储过程,在外部程序访问数据库 ...

随机推荐

  1. Linux之select系统调用_2

    在上一篇博文中,我们的程序中我们有3个客户端,因此也事先建立了3个管道,每个客户端分别使用一个管道向服务器发送消息.而在服务器端使用select系统调用,只要监测到某一管道有消息写入,服务器就将其re ...

  2. BZOJ 2661: [BeiJing wc2012]连连看 费用流

    2661: [BeiJing wc2012]连连看 Description 凡是考智商的题里面总会有这么一种消除游戏.不过现在面对的这关连连看可不是QQ游戏里那种考眼力的游戏.我们的规则是,给出一个闭 ...

  3. 欧拉工程第53题:Combinatoric selections

    package projecteuler51to60; class p53{ void solve1(){ int count=0; int Max=1000000; int[][] table=ne ...

  4. VBA高效删除不连续多行

    最近在搞VBA,在感叹Excel功能强大的同时,对于新接触的一门编程语言也很烦恼.很多基础的语法都要靠网上搜索.现总结一些学习到的心得. VBA高效删除不连续多行 在一个拥有几万条数据的Excel中, ...

  5. mq_open

    NAME mq_open - 打开一个消息队列 (REALTIME) SYNOPSIS #include <mqueue.h> mqd_t mq_open(const char *name ...

  6. Linux基础--用户和组管理

    1.账号管理相关文件 1)/etc/passwd    每一行都代表一个账号,有几行就代表有几个账号在你的系统中,不过需要特别留意的是,里头很多账号本来就是系统中必须要的,我们可以简称他为系统账号, ...

  7. STL:string 大小(Size)和容量(Capacity)

    strings存在三种“大小”: 1.size()和length() 返回string中现在的字符个数.上述两个函数等效. 成员函数empty()用来检验字符数是否为0,亦即字符串是否为空.你应该优先 ...

  8. photoshop菜单显示不全的解决方法

    photoshop菜单显示不全? 解决方法,选择菜单 编辑->菜单,下拉菜单选择photoshop默认值

  9. idea新建maven项目时,mvn archetype:generate 速度缓慢

    原文 idea新建maven项目时,mvn archetype:generate 速度缓慢 1 现象: 用IDEA新建maven项目,填写完各种参数,创建时,控制台卡在“[INFO] Generati ...

  10. python流程控制语句 for循环 - 1

    Python中for循环语句是通过遍历某一序列对象(元组.列表.字典等)来构建循环,循环结束的条件就是遍历对象完成. 语法形式: for <循环变量> in <遍历对象>: & ...