mysql数据库储存过程
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数据库储存过程相关推荐
- 创建MYSQL的储存过程
创建MYAQL的存储过程 1 创建不带参数的储存过程 CREATE PROCEDURE 过程名() 过程体 SELECT VERSION(); 2 调用储存过程 第一种 CALL ...
- MySQL数据库编译过程
编译安装MySQL 准备工作 卸载rpm方式安装的mysql-server.mysql 安装ncurses-devel和cmake包 yum -y install ncurses-devel c ...
- MySQL数据库储存引擎Inoodb一--记录储存结构
在开文我先说明一下,接下来的数据库知识文章都是在微信公众号"我们都是小青蛙"学习然后在通过自己的理解进行书写的.有兴趣的朋友可以去关注这个微信公众号.话不多说,我们在日常使用数据库 ...
- 数据库储存过程超简单实例
网上看了半天都没找到一个完整储存过程从创建到调用的实例,于是自己写了一个简单的实例. 数据库创建存储过程,定义个函数 格式如下,开头DELIMITER //和结尾/DELIMITER 和BEGIN ...
- mysql json储存过程_SQL-mysql储存过程
一 前言 本篇内容是关于mysql储存过程的知识,学习本篇的基础是知识追寻者之前发过的文章(公众号读者看专辑) <SQL-你真的了解什么SQL么?> <SQL-小白最佳入门sql查询 ...
- mysql创建过程_创建MYSQL的储存过程
创建MYAQL的存储过程 1 创建不带参数的储存过程 CREATE PROCEDURE 过程名() 过程体 SELECT VERSION(); 2 调用储存过程 第一种 CALL ...
- 列数较多的csv文件导入mysql数据库(过程及问题记录)
刚接触mysql,想把几个表导入到数据库中,结果就遇到了问题. 原始数据是这样的: 1.使用navicat报错: [ERR] Cannot create table[china_sites_20140 ...
- sqoop遇到mysql字段为保留字_关于在sqoop 导出数据到mysql数据库的过程对于空字符的处理。...
今天在做sqoop的导入和导出的操作.在导出数据到mysql数据库的时候一直有问题,在导入空字段的时候就出现下面这个错误. WARN hdfs.DFSClient: Caught exception ...
- mysql虚拟机授权错误,windows下用navicat链接虚拟机MySQL数据库的过程和问题解决
在线QQ客服:1922638 专业的SQL Server.MySQL数据库同步软件 navicat远程连接到虚拟机中的MySQL数据库 1.在Linux上检查mysql服务器的IP地址 \ ifcon ...
最新文章
- ABP官方文档翻译 6.1.3 异常处理
- java三角形剪角_大班数学:拼角剪角
- 玩转VIM编辑器-vim附加特性
- JavaScript实现sieveOfEratosthenes埃拉托色尼筛选法算法(附完整源码)
- python正则_python的正则表达式
- OUTLOOK邮箱设置
- firefly 环境配置所需工具
- 2021华为软挑再探——代码实现
- 直方图规定化(匹配)
- zipEntry.getSize()=-1
- 火星坐标转WGS84
- iOS Charts
- vue的h函数_vue 中的h函数
- sparc-linux-gcc math.h 调用,无法使用叮进行交叉编译为SPARC
- 框架篇—MVC、MVP、MVCS、MVVM、VIPER使用关系总结
- FPGAi2c总线调试M24LC04B
- android bp文件_Android 基础 | Android.bp 语法浅析
- vc控制计算机关机,192上位机VC MFC实现电脑的重启关机注销功能
- SQL Server之SQL Trace选项
- FastJson1.2.24反序列化导致任意命令执行漏洞复现(CVE-2017-18349)
热门文章
- 网易蓝牙耳机怎么切换双耳_2020双十一蓝牙耳机怎么选?有哪些便宜又好用的蓝牙耳机?有哪些适合学生党的蓝牙耳机?《选购指南》...
- ssh登录一直提示修改密码解决
- 计算机毕设(附源码)JAVA-SSM化妆品销售网站
- 爬虫大作业-爬取B站弹幕
- 学好mysql教材_MySQL基础学习
- 朱丹老师课程学习笔记:8、职场晋升-没人带怎么办?这样搜资料的小白也能变大神
- 小白一键重装有linux,linux小白说说用linux的感受
- 【云原生kubernetes】coredns解析集群外部域名
- 数据库实验四:数据高级查询
- mysql删除与另外一张表有交集的表的记录