一、存储过程:

SQL语句需要先编译然后执行,而存储过程是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用它。

存储过程是可编程的函数,在数据库中创建并保存,可以由SQL语句和控制结构组成。当想要在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟,它允许控制数据的访问方式。

1、为什么需要存储过程:

有人说,不需要把复杂过程封装成MySQL存储过程,用程序(C++/JAVA)也能实现复杂逻辑。如果用程序调用API执行,其实效率相对较慢,原因在于你的应用程序要通过引擎把MySQL语句交付给MySQL引擎来执行,那就不如直接让MySQL负责它最精通最能够完成的工作,所以可以在开发中可以将某些常用的操作封装成存储过程。

2、存储过程和自定义函数的区别:

(1)存储过程实现的功能要复杂一些,而函数的针对性更强;

(2)存储过程可以返回多个值,函数只能有一个返回值;

(3)存储过程一般独立的来执行;而函数可以作为其他SQL语句的组成部分来实现。

二、存储过程的优点:

(1)增强SQL语言的功能和灵活性:存储过程可以用控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。

(2)标准组件式编程:存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。而且数据库专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。

(3)较快的执行速度:如果某一操作包含大量的Transaction-SQL代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多。因为存储过程是预编译的。在首次运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。而批处理的Transaction-SQL语句在每次运行时都要进行编译和优化,速度相对要慢一些。

(4)减少网络流量:针对同一个数据库对象的操作(如查询、修改),如果这一操作所涉及的Transaction-SQL语句被组织进存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句,从而大大减少网络流量并降低了网络负载。

(5)作为一种安全机制来充分利用:通过对执行某一存储过程的权限进行限制,能够实现对相应的数据的访问权限的限制,避免了非授权用户对数据的访问,保证了数据的安全。

三、MySQL存储过程的相关操作:

1、存储过程的创建:

语法:

CREATE PROCEDURE  过程名([[IN|OUT|INOUT] 参数名 数据类型[,[IN|OUT|INOUT] 参数名 数据类型…]]) [特性 ...] 过程体

DELIMITER //
  CREATE PROCEDURE myproc(OUT s int)
    BEGIN
      SELECT COUNT(*) INTO s FROM students;
    END
    //
DELIMITER ;

(1)分隔符:MySQL默认以";"为分隔符,如果没有声明分割符,则编译器会把存储过程当成SQL语句进行处理,因此编译过程会报错,所以要事先用“DELIMITER //”声明当前段分隔符,让编译器把两个"//"之间的内容当做存储过程的代码,不会执行这些代码;“DELIMITER ;”的意为把分隔符还原。

(2)参数:存储过程根据需要可能会有输入、输出、输入输出参数,如果有多个参数用","分割开。MySQL存储过程的参数用在存储过程的定义,共有三种参数类型,IN,OUT,INOUT:

IN:参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值

OUT:该值可在存储过程内部被改变,并可返回

INOUT:调用时指定,并且可被改变和返回

(3)过程体:过程体的开始与结束使用BEGIN与END进行标识。

2、MySQL存储过程的调用:

用call和你过程名以及一个括号,括号里面根据需要,加入参数,参数包括输入参数、输出参数、输入输出参数。

3、MySQL存储过程的查询信息:

#查询存储过程:

SELECT name FROM mysql.proc WHERE db='数据库名';

SELECT routine_name FROM information_schema.routines WHERE routine_schema='数据库名';

SHOW PROCEDURE STATUS WHERE db='数据库名';

#查看存储过程的定义:

SHOW CREATE PROCEDURE 数据库.存储过程名;

#查看状态:

SHOW [PROCEDURE|FUNCTION] STATUS [LIKE 'pattern']

4、MySQL存储过程的修改:

使用ALTER PROCEDURE 更改用CREATE PROCEDURE 建立的预先指定的存储过程,其不会影响相关存储过程或存储功能。

ALTER {PROCEDURE | FUNCTION} sp_name [characteristic ...]

characteristic:

{ CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT 'string'

(1)sp_name参数表示存储过程或函数的名称;

(2)characteristic参数指定存储函数的特性。

(3)CONTAINS SQL表示子程序包含SQL语句,但不包含读或写数据的语句;

(4)NO SQL表示子程序中不包含SQL语句;

(5)READS SQL DATA表示子程序中包含读数据的语句;

(6)MODIFIES SQL DATA表示子程序中包含写数据的语句。

(7)SQL SECURITY { DEFINER | INVOKER }指明谁有权限来执行,DEFINER表示只有定义者自己才能够执行;INVOKER表示调用者可以执行。

(8)COMMENT 'string'是注释信息。

实例:

#将读写权限改为MODIFIES SQL DATA,并指明调用者可以执行。

ALTER  PROCEDURE  num_from_employee
  MODIFIES SQL DATA
  SQL SECURITY INVOKER ;
#将读写权限改为READS SQL DATA,并加上注释信息'FIND NAME'。
ALTER  PROCEDURE  name_from_employee
  READS SQL DATA
  COMMENT 'FIND NAME' ;

5、MySQL存储过程的删除:

#从MySQL的表格中删除一个或多个存储过程。

DROP PROCEDURE [过程1[,过程2…]]

其他更多的有关存储引擎的操作可以参考这篇文章:

https://www.cnblogs.com/mark-chan/p/5384139.html

MySQL数据库:存储过程Procedure相关推荐

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

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

  2. mysql数据库存储过程及调用方法

    mysql数据库存储过程及调用方法 mysql5.0以后就支持存储过程了,目前mysql的6.0Alpha版也已经推出.6.0不仅支持大型数据库如oracle等的绝大部分功 能,如存储过程.视图.触发 ...

  3. jdbc存储过程mysql_JDBC对MySQL数据库存储过程的调用

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

  4. Mysql数据库存储过程基本语法讲解

    Mysql数据库存储过程基本语法讲解 一般情况下MYSQL以:结尾表示确认输入并执行语句,但在存储过程中:不是表示结束,因此可以用该命令将:号改为//表示确认输入并执行.存储过程如同一门程序设计语言, ...

  5. MySQL 案例实战--MySQL数据库 存储过程 存储函数

    MySQL数据库 存储过程 & 存储函数 前言 一.什么是存储过程 & 存储函数 二.存储过程的创建和调用 三.存储函数的创建和调用 前言 本环境是基于 Centos 7.8 系统构建 ...

  6. 使用shell脚本调用mysql数据库存储过程,并设置定时任务

    本来是要mysql数据库中创建事件任务来,定时执行存储过程,做数据传输的...后来由于种种原因,就使用crontab来定时执行,调用存储过程. 实现这个数据传输分为两步: 第一步:编写shell脚本调 ...

  7. MySQL数据库存储过程讲解与实例

    存储过程简介 SQL语句需要先编译然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储 ...

  8. MySQL数据库存储过程

    存储过程相关命令汇总 存储过程 存储过程优化 再说存储过程的输出参数 再说WHILE 和 REPEAT循环 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQ ...

  9. mysql数据库存储过程详解

    1.什么是存储过程 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数( ...

  10. MySQL数据库存储过程动态表建立(PREPARE)

    PREPARE statement_name FROM sql_text /*定义*/ EXECUTE statement_name [USING variable [,variable...]] / ...

最新文章

  1. GTDB:基因组分类数据库,物种注释和进化树构建工具GTDB-tk
  2. QT设置控件背景为透明
  3. python形参中的:*args和**kwargs区别
  4. 基于php的工厂管理系统,PHP设计模式——工厂模式
  5. 设计模式工作笔记-简单工厂场景与实现(针对接口编程的设计思想)
  6. C++语言基础 —— STL —— 容器与迭代器 —— bitset
  7. html5触摸事件判断滑动方向,H5触摸事件中如何判断用户滑动方向
  8. 七牛HTML 上传按钮,七牛 JSSDK 配置+常见问题
  9. C# 反序列化datetime的处理
  10. MATLABnbsp;std()nbsp;标准偏差函数
  11. a4的尺寸大小转换为像素
  12. 监听TCP端口号:从简单Socket到NIO到Netty
  13. Fatal signal 11 (SIGSEGV) at 0x00000048 (code=1)
  14. ElasticSearch倒排索引原理 数据的写入与查询过程
  15. 普通打印机支持的airprint功能
  16. homebrew安装常见错误解决
  17. 图像互信息(MI)的计算(Python版本)
  18. Unable to locate appropriate constructor on class异常
  19. OpenStack 裸金属
  20. 搭建GitLab代码管理仓库

热门文章

  1. 九、深入Java字符串(上篇)
  2. 梯度下降(Gradient Descent)的收敛性分析
  3. CVPR 2019 开源论文 | 基于空间自适应归一化的图像语义合成
  4. 微软论文解读:用于视觉对话的多步双重注意力模型
  5. DeepLabv3+:语义分割领域的新高峰
  6. 爬虫笔记10Scrapy-框架
  7. Python Matplotlib基本用法
  8. 深度学习入门之PyTorch学习笔记:卷积神经网络
  9. codeforces 528D. Fuzzy Search 快速傅里叶变换
  10. 并查集(Union-Find-Set)简洁而高效地处理连通分量的查询与合并