存储程序可以分为存储过程和函数。存储过程和存储函数都是一组sql语句的集合。这些语句集合被当做一个整体存入数据库中。

一. 存储过程

1.1 创建存储过程

create procedure 存储过程名(参数列表)

sql语句集合

(note:begin....end是用于多条sql语句,当只有一条sql语句的时候可以省掉begin....end)

delimiter //
create procedure pro()
begin
select * from stu;  begin和end中间是存储过程体,可以放很多的sql语句
end
//

1.2 调用存储过程

在只是创建了一个存储过程,那么我们怎么来使用这个存储过程呢?

语法:call  存储过程名()

将上一个存储过程pro使用的例子:

call pro();

1.3 创建一个带参数的存储过程

参数列表:存储过程的参数有三种类型:in,out,inout 分别表示传入参数和传出参数,和即传入也传出参数

(1)示例一:统计user表中记录总数并输出

mysql> create table user(-> id int primary key auto_increment,-> name varchar(30),-> age int);
Query OK, 0 rows affected (0.05 sec)

mysql> select *from user;
+----+----------+------+
| id | name     | age  |
+----+----------+------+
|  1 | zhangsan |   23 |
|  2 | lisi     |   14 |
|  3 | wangwu   |   45 |
+----+----------+------+
3 rows in set (0.00 sec)mysql> delimiter //
mysql> create procedure proc(out param1 int)-> begin-> select count(*) into param1 from user;-> end-> //
Query OK, 0 rows affected (0.03 sec)mysql> delimiter ;
mysql> call proc(@param1);
Query OK, 1 row affected (0.00 sec)

mysql> select @param1;
+---------+
| @param1 |
+---------+
|       3 |
+---------+
1 row in set (0.00 sec)

(2)示例二:从User表中查找name等于zhangsan的id号码,并输出

 1 mysql> delimiter //
 2 mysql> create procedure proc2(in param1 varchar(30),out param2 int)
 3     -> begin
 4     -> select id into param2 from user where name=param1;
 5     -> end
 6     -> //
 7 Query OK, 0 rows affected (0.00 sec)
 8
 9 mysql> delimiter ;
10 mysql> call proc2('zhangsan',@param2);
11 Query OK, 1 row affected (0.00 sec)
12
13 mysql> select @param2;
14 +---------+
15 | @param2 |
16 +---------+
17 |       1 |
18 +---------+
19 1 row in set (0.00 sec)

View Code

Note: 也可以通过  set @param1=23 这种方式来给输入参数赋值

二. 存储函数

2.1 存储过程和存储函数的不同

  • 在函数中必须要有return返回值
  • 在存储过程中参数有in  out   inout三种,默认为in类型,但是在函数中只有一种in类型

2.2 创建存储函数

语法:create  function 函数名()

         return 返回类型

          sql语句集合

mysql> delimiter //
mysql> create function fun1(num int)-> returns int-> begin-> return num+100;-> end-> //
Query OK, 0 rows affected (0.00 sec)mysql> delimiter ;
mysql> select fun1(100);
+-----------+
| fun1(100) |
+-----------+
|       200 |
+-----------+
1 row in set (0.00 sec)

2.3 调用存储函数

用语法不在使用关键字call,而是关键字select ,select  函数名

三. 删除存储过程和存储函数

语法:drop   procedure  |   function  存储过程名或者是函数名

 例子:

drop procedure pro;

注意他是不带括号的

四. 游标的使用

4.1 为何需要使用游标

查询语句可能返回多条记录,如果数据量非常大,需要在存储过程存储函数中使用游标来逐条读取查询结果集中的记录。应用程序可以根据需要滚动或浏览其中的数据。

4.2 使用游标的注意点

  • 游标不能单独存在,必须在存储过程或者是存储函数中使用。
  • 游标必须在声明处理程序之前被声明,并且变量和条件还必须在声明光标或处理程序之前被声明。

4.3 具体使用语法

语法:

  • 1.创建游标:declare  游标名  cursor  for  select语句  
  • 2.打开游标:open  游标名
  • 3.使用游标:fetch  游标名  into  变量名
  • 4.关闭光标:close 游标名

4.4 举例

参考:https://blog.csdn.net/xushouwei/article/details/52201360

当然,还可以修改存储过程和函数,以及查看它们的状态等功能。

转载于:https://www.cnblogs.com/Hermioner/p/10363126.html

MySql学习10-----存储过程和函数相关推荐

  1. mysql学习笔记---存储过程和函数①

    创建表格books,price: books b_id   bname author b_date 01 大江东去 阿耐 2019-01-01 02 解忧百货店 东野圭吾 2012-03-28 pri ...

  2. MySQL学习记录 (五) ----- 存储函数、存储过程和触发器

    相关文章: <MySQL学习记录 (一) ----- 有关数据库的基本概念和MySQL常用命令> <MySQL学习记录 (二) ----- SQL数据查询语句(DQL)> &l ...

  3. MySQL学习——操作存储过程

    MySQL学习--操作存储过程 摘要:本文主要学习了使用DDL语句操作存储过程的方法. 了解存储过程 是什么 存储过程是一组为了完成特定功能的SQL语句集合. 使用存储过程的目的是将常用或复杂的工作预 ...

  4. mysql用函数调用存储过程_mysql 函数 调用 存储过程

    Mysql高级之存储过程 原文: Mysql高级之存储过程 概念类似于函数,就是把一段代码封装起来,当要执行这一段代码的时候,可以通过调用该存储过程来实现.在封装的语句体里面,可以用if/else,  ...

  5. mysql高级知识(linux安装mysql+索引+视图+存储过程和函数+触发器)

    一.linux系统安装Mysql 1.mysql安装包: MySQL :: Download MySQL Community Server 2.mysql安装 linux安装在vmware(虚拟机)上 ...

  6. MySQL—变量、存储过程和函数(十一)

    一.变量 1 变量的种类 1.1 系统变量 系统变量一共分为两种:                                     1)全局变量                         ...

  7. mysql中的存储过程和函数

     1.创建存储过程 语法格式为 create procedure sp_name ([proc_parameter])[charateristics -] routine_body proc_pa ...

  8. MySQL表/视图/存储过程and函数/触发器/事件与数据库之间的关系

    mysql中的数据库包含表.视图.存储过程and函数.触发器.以及事件. 数据库: 数据库是存放数据的仓库.数据库中的数据不是直接存在数据库中,而是存在数据库的表中 表(table): 表是数据库中存 ...

  9. oracle的学习Ⅵ(存储过程、函数、包、触发器、简单的用户管理和权限管理)

    命名块(存储过程.函数.包.触发器),而PL/SQL是未命名的不利于重复利用:而且命名块可以运行在服务器端,而PL/SQL块只能运行在客服端 一.存储过程 创建格式 要注意下面存储过程的定义里面数据类 ...

  10. mysql存储过程结构体_八、mysql视图、存储过程、函数以及时间调度器

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

最新文章

  1. 那个每天半夜发加班朋友圈的程序员,你给我站住!
  2. Mysql不需要身份验证便可远程连接故障
  3. 最短路径·三:SPFA算法 HihoCoder - 1093 (spfa无向图)
  4. php的字符串处理总结,php字符串处理函数总结
  5. Source file
  6. BeetleX之TCP消息通讯Protobuf/TLS
  7. 还在用上古的 ls 命令管理文件吗,是时候使用终端文件管理神器 lf 了!
  8. 123个微信小程序源码分享(附下载)
  9. Android Studio欢迎界面和登陆界面的设计(小白)
  10. basler 相机取图超时,basler 相机使用出现的问题
  11. 跨模态行人重识别:Modality Synergy Complement Learning withCascaded Aggregation for Visible-InfraredPerson 笔记
  12. 连接服务器绑定信息无效,警告:ldap_bind():无法绑定到服务器:凭据无效PHP和LDAP...
  13. 在计算机系统中对文件执行彻底删除,怎么让电脑删除文件时可以直接彻底进行删除...
  14. 在国内用Windows给BT做种,真是一山绕过一山缠(附解决方案)
  15. tomcat调优之启动参数
  16. 春季高考计算机专业知识归纳,春季高考计算机试题总结.doc
  17. wordpress 黑客_12个迹象表明您的WordPress网站被黑客入侵
  18. 狂风暴雨——雨过天晴篇:数据流层发布
  19. 网络安全如何进行培训才有效
  20. 双重预防体系智能管理系统助力集团施工企业落实双重预防机制建设

热门文章

  1. C++算法学习(分支限界法)
  2. 计算机系统中字word的描述性定义是,计算机基础练习题1
  3. java打印等腰三角形_可打印丨四年级数学易错易失分的26个知识点总结(附例题+答案),给孩子收藏!...
  4. php ezsql,ezSQL PHP数据库操作类库
  5. Node.js 11.14.0 发布,服务器端的 JavaScript 运行环境
  6. Thread.currentThread().getContextClassLoader()和Class.getClassLoader()区别
  7. mii-tool查看网卡状态
  8. [转]不要告诉我你懂margin
  9. 玩转PHP关联数组的10个技巧(3)
  10. 世界上最成熟、功能最全的加密库HELib