1. 什么是存储过程

参考 https://juejin.im/post/5a9ca0d6518825555c1d1acd

我们常用的关系型数据库是MySQL,操作数据库的语言一般为SQL语句,SQL在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成某种特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。

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

存储过程就像我们编程语言中的函数一样,封装了我们的代码(PLSQL、T-SQL)。

2. 存储过程的优缺点

  • 存储过程的优点:

    • 能够将代码封装起来保存在数据库之中,让编程语言进行调用
    • 存储过程是一个预编译的代码块,执行效率比较高
    • 一个存储过程替代大量T_SQL语句 ,可以降低网络通信量,提高通信速率
    • 存储过程可被作为一种安全机制来充分利用:系统管理员通过执行某一存储过程的权限进行限制,能够实现对相应的数据的访问权限的限制,避免了非授权用户对数据的访问,保证了数据的安全
  • 存储过程的缺点:

    • 每个数据库的存储过程语法几乎都不一样,十分难以维护(不通用)
    • 业务逻辑放在数据库上,难以迭代

3. 实现存储过程

## 创建存储过程  ##
CREATE PROCEDURE PROCEDURE_NAME ()
BEGIN   #此存储过程的正文开始SELECT Avg(pro_price) AS priceaverage  FROM products;
END;    #此存储过程的正文结束## 创建带参数的存储过程 #### 三种参数类型:#IN 输入参数#表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值#OUT 输出参数#该值可在存储过程内部被改变,并可返回#INOUT 输入输出参数#调用时指定,并且可被改变和返回
CREATE PROCEDURE ordertotal(  IN onumber INT,  OUT ototal DECIMAL(8,2)  # OUT用于表明此值是用于从存储过程里输出的
)
BEGIN  SELECT Sum(item_price*quantity)  FROM orderitems  WHERE order_num = onumber INTO ototal;
END;  ## 调用带参数的存储过程 ##
CALL ordertotal(20005, @total);  ## 查询结果
SELECT @total;## 删除存储过程的方法是  ##
DROP PROCUDURE productpricing; 

实例

## 这里需要注意的是DELIMITER // 和 DELIMITER ;
## DELIMITER是分割符的意思,因为MySQL默认以";"为分隔符,如果我们没有声明分割符,那么编译器会把存储过程当成SQL语句进行处理,则存储过程的编译过程会报错,所以要事先用DELIMITER关键字申明当前段分隔符,这样MySQL才会将";"当做存储过程中的代码,不会执行这些代码,用完了之后要把分隔符还原。
mysql> delimiter // # 将分隔符设置为//
mysql> create procedure t(OUT ot decimal(4,2))-> begin-> set ot=3;-> select * from user;-> end;-> //
Query OK, 0 rows affected (0.00 sec)mysql> delimiter ; # 还原分隔符为;mysql> call t(@ot);
+----------+--------+----+
| username | salary | id |
+----------+--------+----+
| lili     |   2000 |  0 |
| mimi     |   5000 |  1 |
| zhao by  |   2000 |  2 |
+----------+--------+----+
3 rows in set (0.00 sec)Query OK, 0 rows affected (0.01 sec)mysql> select @ot;
+------+
| @ot  |
+------+
| 3.00 |
+------+
1 row in set (0.00 sec)

数据库系统-存储过程相关推荐

  1. Sqlserver 2012 导入 DBF文件

    将dbf文件放在任意系统目录下,我放在d:\db目录下 需安装 AccessDatabaseEngine.exe (ACE) 官网下载地址: https://www.microsoft.com/en- ...

  2. SQLServer链接服务器

    远程服务器配置可以使得数据库管理员在服务器以外的主机上连接到一个SQL Server实例,以便管理员在没有建立单据连接的情况下在其他的SQL Server实例上执行存储过程等相关操作.在远程服务器配置 ...

  3. rds mysql 视图 索引_数据库 视图 索引

    SQL2K数据库开发二十二之索引操作在视图上创建索引 1.在企业管理器中,右击要创建索引的视图,在弹出的菜单中选择"设计视图"命令进入视图设计器. 2.在视图设计器中显示了视图所包 ...

  4. SQL server数据库系统部分常用的存储过程及说明

    1 --SQL server数据库系统常用的存储过程 2 exec sp_databases --能看到所有具有权限的数据库名,大小和备注 3 exec sp_helpdb --数据库名,大小,管理员 ...

  5. 【梳理】数据库系统概论 第8章 数据库编程 8.1 嵌入式SQL 8.2 过程化SQL 8.3 存储过程和函数 8.4 ODBC编程

    教材:王珊 萨师煊 编著 数据库系统概论(第5版) 高等教育出版社 注:文档高清截图在后 第8章 数据库编程 标准SQL是非过程化的查询语言,操作统一.面向集合.功能丰富.使用简单.非过程化语言是相对 ...

  6. 数据库系统原理课程总结3——SQL语句,建表,主键外键,存储过程,批量输入百万级数据

    一. 请将你在作业2中设计的模式变成关系数据库中的表,并完成以下任务. 按如下格式要求在实验报告中描述所有涉及到的表的结构 在本次实验中,我设计了六个表格. 表1: 表2: 表3: 表4: 表5: 表 ...

  7. mysql 系统表 存储过程_数据库系统(六)---MySQL语句及存储过程

    1.存储过程是一组为了完成某项特定功能的 SQL 语句集,其实质上就是一段存储在数据库中的代码,它可以由声明式的 SQL 语句(如 CREATE.UPDATE 和SELECT 等语句)和过程式 SQL ...

  8. 《数据库系统概念》7-函数、存储过程、触发器

    2019独角兽企业重金招聘Python工程师标准>>> 一.函数和存储过程 a)通过函数和存储过程可以将业务逻辑保存在数据库,在需要的时候调用.比如学生在一个学期可以修的最大课程数. ...

  9. 《数据库系统实训》实验报告——存储过程

    存储过程 第一部分:样例库的应用 1) Creating Stored Procedures(创建存储过程)SQL语句描述: create procedure productpricing( ) be ...

最新文章

  1. 华为认证网络互连专家-HCIE-RS模拟试卷
  2. 8.正交匹配跟踪 Orthogonal Matching Pursuit (OMP)s
  3. 2010年复旦MBA预审说明
  4. c++编写算法判断二叉树是否为完全二叉树_字节面试官:连这90道LeetCode算法题都不会也来面试?...
  5. oracle存储一个数字格式,Oracle根本数据类型存储格式研究(二)—数字类型
  6. 如何加密 Ubuntu 安装后的主文件夹
  7. mysql创建用户navicat_14MYSQL创建用户和授权、15Navicat的使用、16-pymysql模块的使用、17-索引...
  8. 零基础学启发式算法(3)-禁忌搜索 (Tabu Search)
  9. Linux下配置jdk1.7
  10. 大学生python心得1000字_大学生读书心得1000字3篇
  11. 欧姆龙cp1h指令讲解_欧姆龙PLC编程指令含义及其用法
  12. 前端 js 设置cookie的方式及遇到cookie方面的问题
  13. react 如何引入打印控件 CLodop
  14. CSS outline 属性
  15. 前端激荡三十年,从无到有,从单一到炫彩,技术从未停止!
  16. 5、kubernetes Scale Up/Down在线增加或减少 Pod 的副本数、Failover故障转移、用 label(标签)控制 Pod 的位置
  17. 听诊器的基本构造及其特征
  18. SeaJS入门教程系列之使用SeaJS(二)
  19. C3P0的三种使用方法
  20. 在windows下使用python中的select函数报错‘[WinError 10038] 在一个非套接字上尝试了一个操

热门文章

  1. 绝缘电阻仪测试仪与绝缘耐压测试仪的区别
  2. python控制程控电源_程控开关稳压电源的控制方式对比
  3. Linux终端模式下查看电脑的硬件配置信息小技巧
  4. Idea生成英文JavaDoc以及中文编码问题
  5. 单片机应用编程技巧100问
  6. 利用MyBatis实现CRUD操作
  7. Java继承(extends )
  8. 高龄白菜java学习第109天(java数据结构和算法(27))
  9. UEA数据集和UCR数据集的处理
  10. 区块链技术在软件开发中的应用