存储程序分为存储过程和函数

  可以使用CALL来调用存储过程,只能输出变量返回值。存储过程可以调用其他存储过程

  函数可以从语句外调用,也能返回标量值

  什么是存储过程?

  简单的说,就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法;

  ps:存储过程跟触发器有点类似,都是一组SQL集,但是存储过程是主动调用的,且功能比触发器更加强大,触发器是某件事触发后自动调用;

  存储过程的特性

  有输入输出参数,可以声明变量,有if/else, case,while等控制语句,通过编写存储过程,可以实现复杂的逻辑功能;

  函数的普遍特性:模块化,封装,代码复用;

  速度快,只有首次执行需经过编译和优化步骤,后续被调用可以直接执行,省去以上步骤;

  DELIMITER的使用

  mysql默认的结束符为;但是存储过程中可能出现多个分号导致结束。所以需要用这个关键字设置SQL语句结束符,使用完之后可以再改回来

  要避免使用\,因为\是mysql的转义字符

  一、存储过程的创建

  CREATE PROCEDURE sp_name ([proc_parameter[,...]])

  [characteristic ...] routine_body;

  sp_name:存储过程的名称

  proc_parameter:存储过程的参数列表

  routine_body:是SQL代码的内容(用BEGIN和END来表示SQL代码的开始和结束)

  proc_parameter格式如下:

  [ IN | OUT | INOUT ] param_name type

  IN表示输入参数,OUT表示输出参数,INOUT表示既可以输入也可以输出

  param_name参数的名称

  type参数的类型

  演示

  创建一个名为AvgFruitPrice的存储过程,返回所有水果的平均价格

  DELIMITER //

  create procedure AvgFruitPrice()

  begin

  select avg(f_price) as avgprice from fruits;

  end;

  //

  创建一个查看fruits表的存储过程

  DELIMITER //

  create procedure Proc()

  begin

  select * from fruits;

  end;

  //

  创建名称为CountProc的存储过程(将count(*)的结果放入参数param1中)

  DELIMITER //

  create procedure CountProc(out paraml int)

  begin

  select count(*) into param1 from fruits;

  end;无锡做人流 http://www.chnk120.com

  //

  二、函数的创建

  CREATE FUNCTION func_name ([func_parameter[,……]])

  RETURNS type

  [characteristic……] routine_body

  func_name:存储函数的名称

  func_parameter:存储过程的参数列表

  RETURNS type:表示函数返回数据的类型

  characteristic:指定存储函数的特性

  proc_parameter格式如下:

  [ IN | OUT | INOUT ] param_name type

  IN表示输入参数,OUT表示输出参数,INOUT表示既可以输入也可以输出

  param_name参数的名称

  type参数的类型

  如果存储函数的RETURN语句返回一个类型不同于函数的RETURNS子句中指定类型的值,返回值将被强制转为恰当的类型

  案例

  创建名为NameByZip的存储函数,返回select语句的查询结果,数值类型为字符串类型

  DELIMITER //

  create function NameByZip()

  returns varchar(50)

  return (select s_name from suppliers where s_call='48075');

  //

MySQL教程之存储过程与函数的更多相关文章

  1. MySQL中的存储过程和函数使用详解

    一.对待存储过程和函数的态度 在实际项目中应该尽量少用存储过程和函数,理由如下: 1.移植性差,在MySQL中的存储过程移植到sqlsever上就不一定可以用了. 2.调试麻烦,在db中报一个错误和在 ...

  2. MySQL基础值 存储过程和函数

    一.创建存储过程和函数 什么是创建存储过程和函数? 就是将经常使用的一组SQL语句组合在一起,并将这些SQL语句当做一个整体存储在MYSQL服务器中. 创建存储过程的语句是:CREATE  PROCE ...

  3. MySQL中的存储过程和函数

    存储过程和函数 简单的说,存储过程就是一条或者多条SQL语句的集合.可以视为批文件,但是其作用不仅仅局限于批处理.本文主要介绍如何创建存储过程和存储函数,以及如何调用.查看.修改.删除存储过程和存储函 ...

  4. MySQL存储过程和自定义函数、Navicat for mysql、创建存储过程和函数、调用存储过程和函数的区别

    1 MySQL存储过程和函数 过程和函数,它们被编译后保存在数据库中,称为持久性存储模块(Persistent Stored Module,PSM),可以反复调用,运行速度快. 1.1 存储过程 存储 ...

  5. MySQL中的存储过程、函数与触发器

    一.对待存储过程和函数的态度 优点: 1.存储过程只在创建时进行编译,sql语句则每次执行都需要编译.能提高数据库执行速度. 2.简单复杂操作结合事物一起封装. 3.复用性高. 4.安全性高,可指定存 ...

  6. <MySQL>入门七 存储过程和函数

    -- 存储过程和函数 /* 存储过程和函数:类似java中的方法 好处: 1.提高代码的重用性 2.简化操作 */ /* 存储过程 含义:一组预先编译好的SQL语句的集合.理解成批处理语句 1.提高代 ...

  7. Mysql变量、存储过程、函数、流程控制

    一.系统变量 系统变量: 全局变量 会话变量 自定义变量: 用户变量 局部变量 说明:变量由系统定义,不是用户定义,属于服务器层面 注意:全局变量需要添加global关键字,会话变量需要添加sessi ...

  8. MySql视图、存储过程、函数、索引

    一.视图 视图是查询命令结果构成的一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集合,并可以当作表来查询使用. 1创建视图 - ...

  9. 八、mysql视图、存储过程、函数以及时间调度器

    .create or replace view emp_view as select * from t4 ;给t4表创建一个名为emp_view的视图 .drop view emp_view 删除视图 ...

随机推荐

  1. hdu1162 Eddy's picture 基础最小生成树

    #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> # ...

  2. LCA UESTC 92 Journey

    题目传送门 题意:先给一棵树,然后有一条额外的边,问u走到v从现在最短的路走和原来不加边走的路节省了多少距离 分析:首先跑不加边的树的LCA,这样能求出任意两点的距离,那么现在x和y多连了一条边,如果 ...

  3. git导出代码

    1.快速查询 $git archive --format zip --output "./output.zip" master -0 ./output.zip 是生成的文件 mas ...

  4. mysql查询所有表名

    mysql使用sql查询表名的两种方法: 1.show tables; 2.SELECT TABLE_NAME,TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WH ...

  5. 1051 - Good or Bad DFS 记忆化搜索

    http://lightoj.com/volume_showproblem.php?problem=1051 对于每个位置,设dfs(cur, one, two)表示前i个字母,拥有辅音字母one个, ...

  6. Linux下用matplotlib画决策树

    1.trees = {'no surfacing': { 0: 'no', 1: {'flippers': {0: 'no', 1: 'yes'}}}} 2.从我的文件trees.txt里读的决策树, ...

  7. MVC 下 ajax调用 日期差值计算

    背景: 服务项目已有服务期起止时间From-To 现在要根据用户输入的新的起始时间, 和该服务期的原有区间值, 计算出新的服务期截止时间 即 NewServiceToDateTime = NewSer ...

  8. mvc不登录的情况下无法跳转至其他页面--解决方法之一

    在每个控制器里,加以下方法 /// <summary> /// 在调用视图之前拦截非法用户 /// </summary> /// <param name="fi ...

  9. Web前端开发的四个阶段(小白必看)

    第一阶段:HTML的学习 超文本标记语言(HyperText Mark-up Language 简称HTML)是一个网页的骨架,无论是静态网页还是动态网页,最终返回到浏览器端的都是HTML代码,浏览器 ...

  10. 初次使用引用外部js心得

    在外部引用自己编辑的js时建立链接写在头部中是会出错的,如下图 错误如下: 这是一个是我初学时遇到的一个算是低级错误吧,看到这个错误,我以为的是我引用的js中编辑的代码是不是哪里写错了,但是看了好多遍 ...