一天一点MySQL复习——存储过程
一、存储过程概念
使用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复习——存储过程的更多相关文章
- 一天一点MySQL复习——获取数据库系统时间、变量赋值、变量比较
一.SQL获取系统时间 mysql> select now() from dual; +---------------------+ | now() | +------------------- ...
- mysql之存储过程
一.存储过程 迄今为止,使用的大多数 SQL语句都是针对一个或多个表的单条语句.并非所有操作都这么简单,经常会有一个完整的操作需要多条语句才能完成.例如,考虑以下的情形. 1. ...
- MySQL的存储过程1
来源:http://blog.sina.com.cn/s/blog_52d20fbf0100ofd5.html MySQL的存储过程 2. 关于MySQL的存储过程存储过程是数据库存储的一个重要的功能 ...
- Mysql的存储过程(以Mysql为例进行讲解)
我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储 在数据库中,用户通过指定存 ...
- MYSQL:基础—存储过程
MYSQL:基础-存储过程 快速入门 理解: 迄今为止,我们学过的大多数SQL语句都是针对一个或多个表的单条语句.但是并不是所有的操作都是可以用一条语句来完成的,经常有一些操作是需要多条语句配合才能完 ...
- MYSQL复习笔记9-存储过程
date: 20140208auth: Jin参考引用:http://blog.sina.com.cn/s/blog_52d20fbf0100ofd5.html mysql存储过程详解一.基本介绍1. ...
- mySQL的存储过程详解
mysql存储过程详解 1. 存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的S ...
- JDBC对MySQL数据库存储过程的调用
一.MySQL数据库存储过程: 1.什么是存储过程 存储过程(英文:Stored Procedure)是在大型数据库系统中,为了完成特定功能而编写的一组的SQL语句集.存储过程经编译存储在数据库中,用 ...
- MYSQL中存储过程的创建,调用及语法
MySQL 存储过程是从 MySQL 5.0 开始增加的新功能.存储过程的优点有一箩筐.不过最主要的还是执行效率和SQL 代码封装.特别是 SQL 代码封装功能,如果没有存储过程,在外部程序访问数据库 ...
随机推荐
- 扩展 delphi 线程 使之传递参数.(给匿名线程增加参数)
新delphi的线程TThread有了CreateAnonymousThread方法,如果再为它加一个可传递的参数不就更好了吗?代码如下: TAnonymousThreadX<T> = c ...
- PHP使用CURL详解
CURL是一个非常强大的开源库,支持很多协议,包括HTTP.FTP.TELNET等,我们使用它来发送HTTP请求.它给我 们带来的好处是可以通过灵活的选项设置不同的HTTP协议参数,并且支持HTTPS ...
- [iOS问题归总]SourceTree+osChina版本管理出现的问题
1.commit失败(1) 解决办法: 把爆红的路径的文件删除掉, 重新commit 2. push时候, 有100MB限制 解决办法: Git只允许上传最大100MB的文件,如果超过,则会被serv ...
- MyBatis学习总结_18_MyBatis与Hibernate区别
也用了这么久的Hibernate和MyBatis了,一直打算做一个总结,就他们之间的优缺点说说我自己的理解: 首先,Hibernate是一个ORM的持久层框架,它使用对象和我们的数据库建立关系,在Hi ...
- C++:构造函数默认的参数声明
C++函数的默认参数指的是在函数声明或者定义时给形式参数指定默认值,从而在调用参数时可以少写参数,少掉的参数用默认值代替.LZ的Display()函数的代码看起来似乎是可以有s2和s3两个默认参数,那 ...
- 3、Object对象的两大方法(hashCode-equals)总结
Object类是所有java类的父类. 用户定义了如下一个Person类 public class Person{} 在类定义中并没有明确继承Object类,但是编译器会自动的完成这个过程. 既然所有 ...
- JSP列表形式显示数据库中的数据 OracleCachedRowSet 实例
现在数据库中有一张用户表,希望用户在jsp页面中输入用户名和密码以及 用户类型,在servlet中插入数据库后,在另一个jsp页面中把数据库中所有的用户名和类型都以列表的形式列出来 可以用Ora ...
- opencv 金字塔图像分割
我所知的opencv中分割函数:watershed(只是看看效果,不能返回每类pixel类属),cvsegmentImage,cvPyrSegmentation(返回pixel类属) 金字塔分割原理篇 ...
- jenkins-slave的搭建和使用
一 什么是Jenkins的分布式构建和部署 Jenkins的分布式构建,在Jenkins的配置中叫做节点,分布式构建能够让同一套代码或项目在不同的环境(如:Windows和Linux系统)中编译.部署 ...
- Linux之Samba的配置
Samba的配置 对于linux与windows共享,和平共处,我们可以用Samba软件 Samba是一套免费的开源软件,可以在linux或其他类unix操作系统上实现windows域控制器,文件 ...