mysql数据库储存过程

mysql数据库的 ‘储存过程’ 其实就是把多个select操作的语句封装起来,再给他们一个名称用来以后的调用,你可以理解为python中的函数,差不多

优点

1 通过吧处理封装在容易使用的单元中,简化复杂的操作

2 由于不要求反复建立一系列处理步骤,这保证了数据的完整性。如果开发人员和应用程序都使用了同一存储过程,则所使用的代码是相同的。还有就是防止错误,需要执行的步骤越多,出错的可能性越大。防止错误保证了数据的一致性。

3 简化对变动的管理。如果表名、列名或业务逻辑有变化。只需要更改存储过程的代码,使用它的人员不会改自己的代码了都。

4 提高性能,因为使用存储过程比使用单条SQL语句要快

5 存在一些职能用在单个请求中的MySQL元素和特性,存储过程可以使用它们来编写功能更强更灵活的代码

换句话说3个主要好处简单、安全、高性能

缺点

1 一般来说,存储过程的编写要比基本的SQL语句复杂,编写存储过程需要更高的技能,更丰富的经验。

2 你可能没有创建存储过程的安全访问权限。许多数据库管理员限制存储过程的创建,允许用户使用存储过程,但不允许创建存储过程

存储过程是非常有用的,应该尽可能的使用它们

创建储存过程:
CREATE PROCEDURE 存储过程名()

       一个例子说明:一个返回产品平均价格的存储过程如下代码:CREATE  PROCEDURE  productpricing()BEGINSELECT Avg(prod_price)  AS priceaverageFROM products;END;

//创建存储过程名为productpricing,如果存储过程需要接受参数,可以在()中列举出来。即使没有参数后面仍然要跟()。BEGIN和END语句用来限定存储过程体,过程体本身是个简单的SELECT语句

在MYSQL处理这段代码时会创建一个新的存储过程productpricing。没有返回数据。因为这段代码时创建而不是使用存储过程。

Mysql命令行客户机的分隔符

默认的MySQL语句分隔符为分号 ; 。Mysql命令行实用程序也是 ; 作为语句分隔符。如果命令行实用程序要解释存储过程自身的 ; 字符,则他们最终不会成为存储过程的成分,这会使存储过程中的SQL出现句法错误
解决方法是临时更改命令实用程序的语句分隔符

        DELIMITER //    //定义新的语句分隔符为//CREATE PROCEDURE productpricing()BEGINSELECT Avg(prod_price) AS priceaverageFROM products;END //DELIMITER ;    //改回原来的语句分隔符为 ;除\符号外,任何字符都可以作为语句分隔符CALL productpricing();  //使用productpricing存储过程执行刚创建的存储过程并显示返回的结果。因为存储过程实际上是一种函数,所以存储过程名后面要有()符号

删除储存过程

DROP PROCEDURE productpricing ;    //删除存储过程后面不需要跟(),只给出存储过程名为了删除存储过程不存在时删除产生错误,可以判断仅存储过程存在时删除DROP PROCEDURE IF EXISTS

一般存储过程并不显示结果,而是把结果返回给你指定的变量

CREATE PROCEDURE productpricing(OUT p1 DECIMAL(8,2),OUT ph DECIMAL(8,2),OUT pa DECIMAL(8,2),)BEGINSELECT Min(prod_price)INTO p1FROM products;SELECT Max(prod_price)INTO phFROM products;SELECT Avg(prod_price)INTO paFROM products;END;

此存储过程接受3个参数,p1存储产品最低价格,ph存储产品最高价格,pa存储产品平均价格。每个参数必须指定类型,这里使用十进制值。关键字OUT指出相应的参数用来从存储过程传给一个值(返回给调用者)。MySQL支持IN(传递给存储过程)、OUT(从存储过程中传出、如这里所用)和INOUT(对存储过程传入和传出)类型的参数。存储过程的代码位于BEGIN和END语句内,如前所见,它们是一些列SELECT语句,用来检索值,然后保存到相应的变量(通过INTO关键字)
调用修改过的存储过程必须指定3个变量名:

    CALL productpricing(@pricelow , @pricehigh , @priceaverage);这条CALL语句给出3个参数,它们是存储过程将保存结果的3个变量的名字变量名  所有的MySQL变量都必须以@开始使用变量SELECT @priceaverage ;SELECT @pricelow , @pricehigh , @priceaverage ;   //获得3给变量的值

下面是另一个例子,这次使用IN和OUT参数。ordertotal接受订单号,并返回该订单的合计

        CREATE PROCEDURE ordertotal(IN onumber INT,OUT ototal DECIMAL(8,2))BEGINSELECT Sum(item_price*quantity)FROM orderitemsWHERE order_num = onumberINTO ototal;END;//onumber定义为IN,因为订单号时被传入存储过程,ototal定义为OUT,因为要从存储过程中返回合计,SELECT语句使用这两个参数,WHERE子句使用onumber选择正确的行,INTO使用ototal存储计算出来的合计为了调用这个新的过程,可以使用下列语句:CALL ordertotal(2005 , @total);   //这样查询其他的订单总计可直接改变订单号即可SELECT @total;

基本的简单应用这样就是可以了,如果你还要细看的话,可以借鉴一下这个博客:
https://www.cnblogs.com/l5580/p/5993238.html

mysql数据库储存过程相关推荐

  1. 创建MYSQL的储存过程

    创建MYAQL的存储过程 1   创建不带参数的储存过程 CREATE  PROCEDURE  过程名()  过程体 SELECT  VERSION(); 2   调用储存过程 第一种   CALL ...

  2. MySQL数据库编译过程

    编译安装MySQL 准备工作  卸载rpm方式安装的mysql-server.mysql  安装ncurses-devel和cmake包  yum -y install ncurses-devel c ...

  3. MySQL数据库储存引擎Inoodb一--记录储存结构

    在开文我先说明一下,接下来的数据库知识文章都是在微信公众号"我们都是小青蛙"学习然后在通过自己的理解进行书写的.有兴趣的朋友可以去关注这个微信公众号.话不多说,我们在日常使用数据库 ...

  4. 数据库储存过程超简单实例

    网上看了半天都没找到一个完整储存过程从创建到调用的实例,于是自己写了一个简单的实例. 数据库创建存储过程,定义个函数 格式如下,开头DELIMITER //和结尾/DELIMITER  和BEGIN  ...

  5. mysql json储存过程_SQL-mysql储存过程

    一 前言 本篇内容是关于mysql储存过程的知识,学习本篇的基础是知识追寻者之前发过的文章(公众号读者看专辑) <SQL-你真的了解什么SQL么?> <SQL-小白最佳入门sql查询 ...

  6. mysql创建过程_创建MYSQL的储存过程

    创建MYAQL的存储过程 1   创建不带参数的储存过程 CREATE  PROCEDURE  过程名()  过程体 SELECT  VERSION(); 2   调用储存过程 第一种   CALL ...

  7. 列数较多的csv文件导入mysql数据库(过程及问题记录)

    刚接触mysql,想把几个表导入到数据库中,结果就遇到了问题. 原始数据是这样的: 1.使用navicat报错: [ERR] Cannot create table[china_sites_20140 ...

  8. sqoop遇到mysql字段为保留字_关于在sqoop 导出数据到mysql数据库的过程对于空字符的处理。...

    今天在做sqoop的导入和导出的操作.在导出数据到mysql数据库的时候一直有问题,在导入空字段的时候就出现下面这个错误. WARN hdfs.DFSClient: Caught exception ...

  9. mysql虚拟机授权错误,windows下用navicat链接虚拟机MySQL数据库的过程和问题解决

    在线QQ客服:1922638 专业的SQL Server.MySQL数据库同步软件 navicat远程连接到虚拟机中的MySQL数据库 1.在Linux上检查mysql服务器的IP地址 \ ifcon ...

最新文章

  1. ABP官方文档翻译 6.1.3 异常处理
  2. java三角形剪角_大班数学:拼角剪角
  3. 玩转VIM编辑器-vim附加特性
  4. JavaScript实现sieveOfEratosthenes埃拉托色尼筛选法算法(附完整源码)
  5. python正则_python的正则表达式
  6. OUTLOOK邮箱设置
  7. firefly 环境配置所需工具
  8. 2021华为软挑再探——代码实现
  9. 直方图规定化(匹配)
  10. zipEntry.getSize()=-1
  11. 火星坐标转WGS84
  12. iOS Charts
  13. vue的h函数_vue 中的h函数
  14. sparc-linux-gcc math.h 调用,无法使用叮进行交叉编译为SPARC
  15. 框架篇—MVC、MVP、MVCS、MVVM、VIPER使用关系总结
  16. FPGAi2c总线调试M24LC04B
  17. android bp文件_Android 基础 | Android.bp 语法浅析
  18. vc控制计算机关机,192上位机VC MFC实现电脑的重启关机注销功能
  19. SQL Server之SQL Trace选项
  20. FastJson1.2.24反序列化导致任意命令执行漏洞复现(CVE-2017-18349)

热门文章

  1. 网易蓝牙耳机怎么切换双耳_2020双十一蓝牙耳机怎么选?有哪些便宜又好用的蓝牙耳机?有哪些适合学生党的蓝牙耳机?《选购指南》...
  2. ssh登录一直提示修改密码解决
  3. 计算机毕设(附源码)JAVA-SSM化妆品销售网站
  4. 爬虫大作业-爬取B站弹幕
  5. 学好mysql教材_MySQL基础学习
  6. 朱丹老师课程学习笔记:8、职场晋升-没人带怎么办?这样搜资料的小白也能变大神
  7. 小白一键重装有linux,linux小白说说用linux的感受
  8. 【云原生kubernetes】coredns解析集群外部域名
  9. 数据库实验四:数据高级查询
  10. mysql删除与另外一张表有交集的表的记录