mysql存储过程_Mysql存储过程

存储过程

存储过程简单来说,就是为以后的使用而保存的一条或多条MySQL语句的集合。可将其视为批件,虽然它们的作用不仅限于批处理。

在我看来, 存储过程就是有业务逻辑和流程的集合, 可以在存储过程中创建表,更新数据, 删除等等。

为什么要使用存储过程

通过把处理封装在容易使用的单元中,简化复杂的操作(正如前面例子所述)。

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

简化对变动的管理。如果表名、列名或业务逻辑(或别的内容)有变化,只需要更改存储过程的代码。使用它的人员甚至不需要知道这些变化。

一个简单的存储过程

create procedure porcedureName ()

begin

select name from user;

end;

存储过程用create procedure 创建, 业务逻辑和sql写在begin和end之间。mysql中可用call porcedureName ();来调用过程。

-- 调用过程

call porcedureName ();

该存储过程没有参数, 只是在调用的时候查询了用户表的用户名而已, 调用结果如下

name

admin

admin1

admin2

admin3

删除存储过程

DROP PROCEDURE IF EXISTS porcedureName; -- 没有括号()

使用参数的存储过程

create procedure procedureName(

out min decimal(8,2),

out avg decimal(8,2),

out max decimal(8,2)

)

BEGIN

select MIN(price) INTO min from order;

select AVG(price) into avg from order;

select MAX(price) into max from order;

END;

此过程接受三个参数, 分别用于获取订单表的最小、平均、最大价格。每个参数必须具有指定的类

型,这里使用十进制值(decimal(8,2)), 关键字OUT指出相应的参数用来从存储过程传出

一个值(返回给调用者)

MySQL支持IN(传递给存储过程)、OUT(从存储过程传出,如这里所用)和INOUT(对存储过程传入和传出)类型的参数。存储过程的代码位于BEGIN和END语句内,如前所见,它们是一系列SELECT语句,用来检索值,然后保存到相应的变量(通过指定INTO关键字)

为调用此修改过的存储过程,必须指定3个变量名,如下所示:(所有MySQL变量都必须以@开始。)

-- 由于过程指定三个参数, 故调用必须要参数匹配

call procedureName(@min, @avg, @max);

该调用并没有任何输出, 只是把调用的结果赋给了调用时传入的变量(@min, @avg, @max)。然后即可调用显示该变量的值。

select @min, @avg, @max;

结果如下

@min

@avg

@max

42.00

601.00

2222.00

使用in参数, 输入一个用户id, 返回该用户所有订单的总价格。

create procedure getTotalById (

in userId int,

out total decimal(8,2)

)

BEGIN

select SUM(r.price) from order r

where r.u_id = userId

into total;

END;

调用存储过程

call getTotalById(1, @total);

select @total;

结果将返回该用户所有订单的合计价格。

复杂一点的过程, 根据用户id获取该用户的所有订单价格, 并动态的选择是否加税。代码设计如下

create procedure getTotalByUser2(

in userId int,

in falg boolean, -- 是否加税标记

out total decimal(8,2)

)

begin

DECLARE tmptotal DECIMAL(8,2);

DECLARE taxrate int DEFAULT 6;-- 默认的加税的利率

select SUM(r.price) from order r

where r.u_id = userId

into tmptotal;

if taxable then

select tmptotal + (tmptotal/1000*taxrate) into tmptotal;

end if;

select tmptotal into total;

END;

该过程传入三个参数, 用户id, 是否加税以及返回的总价格,在过程内部, 定义两个局部变量tmptotal和taxrate,把查询出来的结果赋给临时变量, 在判断是否加税。最后把局部变量的值赋给输出参数。

call getTotalByUser2(1, false, @total); -- 不加税

call getTotalByUser2(1, true, @total); -- 加税

select @total;

参考自mysql必知必会, 转载请注明出处。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/261344.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

修复IE9-- safari 的sort方法

解决方案其实就是冒泡排序的一个包装 本补丁不修复各浏览的排序算法不一致的问题 当前版本 v0.2v0.1 修复IE9-- Array.prototype.sort 不能根据 对象属性 做排序的遗憾v0.2 修复safari 不支持函数参数 ; !function(window){var ua window.navigator.userAgent.toLowerCase(),r…

还原virtual函数的本质-----C++

当你每次看到C类中声明一个virtual函数,特别是看到了一个virtual的虚构函数。你知道它的意思吗?你肯定会毫不犹豫的回答:不就是多态么。。。在运行时确定具体的行为么。。。完全正确,但这里我要讲的不只是这些东西。 有些类需要虚…

C++实践参考——数组类运算的实现

【项目-数组类运算的实现】   设计数组类Array,为了实现测试函数中要求的功能,请补足相关的函数(构造、析构函数)和运算符重载的函数。   实现策略提示:可以将测试函数中的语句加上注释,取消一句的注…

MySQL支持的四种索引_Mysql常见四种索引的使用

提到mysql优化,索引优化是必不可少的。其中一种优化方式 ——索引优化,添加合适的索引能够让项目的并发能力和抗压能力得到明显的提升。我们知道项目性能的瓶颈主要是在"查(select)"语句,要提升"查"这一性能,…

java调用、执行groovy代码

java调用、执行groovy代码 1: package test; 2: 3: import javax.script.ScriptEngine; 4: import javax.script.ScriptEngineManager; 5: import javax.script.ScriptException; 6: 7: public class ScriptExcuteUtil { 8: 9: public ScriptExcuteUtil() { 10: 11…

AGS Server 10.1 切图工具

在AGS Sever中很重要的功能就是地图缓存的制作,安装AGS Sever会在catalog中增加相关的工具箱,利用这些工具可以制作、删除、更新切片 一、Convert map server cache storage format(转换服务缓存的存储格式) 利用该工具可以快速的切换地图缓存的格式&…

0511 backlog 项目管理

SCRUM 这次的作业就是确定SCRUM的计划,确定sprint backlog的一个冲刺周期,而这个周期是两个星期。争取在两周内发布1.0版本。 本次作业以网站构建为主: ID NAMEIMPESTHOW TO DONOTES1首页99小时用户登录网站也可以看游客的推广的内容&am…

swing和MySQL登录注册_JavaSwing+Mysql实现简单的登录界面+用户是否存在验证

原生Javamysql登录验证clientlogin.java功能:实现登录页面,与服务端传来的数据验证package LoginRegister;import java.awt.Container;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.regex.Pattern;import …

4月27日微软云训练营活动-现场图集

1.签到 2.到场同学,这一天是工作日,但是人气依然很火。 转载于:https://www.cnblogs.com/finehappy/p/3262296.html

vim编程 插入 保存不退出 保存退出 退出不保存 另存为其他文件名 保存覆盖现有文件...

---恢复内容开始--- 在xshell里写代码,如果需要编辑代码,可以输入 vim xxx.py ,进入vim编辑界面 这里的xxx.py表示 python的存储文件,后缀名是.py。1.插入字符 输入 i 可键入或者shift i2&…

wdcp mysql密码_wdcp默认的mysql密码是多少?

重置mysql root密码方法一、Windows环境的找回方法:1、打开cmd命令窗口,先输入命令:net stop mysql 回车 #关闭mysql服务。进入到D:\SOFT_PHP_PACKAGE\mysql\bin\ 目录下,执行mysqld --skip-grant-tables 启动MySQL Server (如果报…

Java中内存中的Heap、Stack与程序运行的关系

堆和栈的内存管理 栈的内存管理是顺序分配的,而且定长,不存在内存回收问题;而堆 则是随机分配内存,不定长度,存在内存分配和回收的问题;堆内存和栈内存的区别可以用如下的比喻来看出:使用堆内存…

ASP.NET Core的配置(5):配置的同步[设计篇]

本节所谓的“配置同步”主要体现在两个方面:其一,如何监控配置源并在其变化的时候自动加载其数据,其目的是让应用中通过Configuration对象承载的配置与配置源的数据同步;其二、当Configuration对象承载的配置放生变换的时候如何向…

mysql 5.6 linux安装配置_linux手动安装配置mysql5.6

1.准备工作①官网下载:https://dev.mysql.com/downloads/mysql/5.6.html#downloads下载之后上传到服务器。②创建linux组用户groupadd mysqluseradd -g mysql mysql2.安装①解压,比如放到了/usr/local/,进入到该目录下,进行用z解压gz包&#…

Winodws Socket I/O模型的整理

Winodws Socket I/O模型的整理大致分以五种.其中Overlapped I/O模型是有两种实现方法. 一:select模型二:WSAAsyncSelect模型三:WSAEventSelect模型四:Overlapped I/O 事件通知模型/完成例程模型五:完成端口IOCP模型 这…

KVM安装Windows Server 2008 R2使用virtio硬盘

在上一篇文章中,我们介绍了使用IDE硬盘来安装Windows Server 2008 R2,这篇文章我们来介绍使用virtio硬盘来安装Windows Server 2008 R2。 说明:KVM默认使用的硬盘格式为virtio。 使用virtio接口的硬盘,我们必须加载virtio硬盘驱动。如果不加载…

Sublime Text 2 入门及技巧

看了 Nettuts 对 Sublime Text 2 的介绍,立刻就兴奋了,诚如作者 Jeffrey Way 所说:“《永远的毁灭公爵》都发布了,TextMate 2 还没发”,你还能指望它么?TextMate 开发者的消极态度已经无法让人忍受了。而作…

跨域名,服务器登录 .

编辑器加载中... function SingleSignOn() {//只能用脚本改变指定 Form 提交的对象 document.getElementById("form1").action"http://。。。。。/WebApp/UsersLogin.aspx"; //把隐藏控件 __VIEWSTATE 中的值变更为 LoginTransfer…

YII 配置文件

用YIIFramework的库开发 Java代码 .... Yii::createWebApplication($config); //没有run Yii::import(class1,true),在将class1类文件路径存储时,同时include该文件 注意:你也可以将配置文件分为多个文件&#xff0…

mysql 备份到别的机器_物理拷贝备份mysql到其他机器上恢复

经常会遇到mysql数据要迁徙的情况 ,逻辑导出是可以的 但是就是太慢 第三方工具也同样可以用 也是操作麻烦,最简单粗暴的方式就是直接拷贝物理文件来的最快 也很简单 当然 前提是远程服务器和目标服务器是相同的文件系统和mysql版本,不然还是没…