实验五MySQL存储过程_「mysql 存储过程」MySQL | 存储过程 - seo实验室

news/2024/5/10 22:22:42/文章来源:https://blog.csdn.net/weixin_29464593/article/details/113716330

mysql 存储过程

一、概念

存储过程简称过程,procedure,是一种用来处理数据(增删改)的方式。简单点,我们也可以将其理解为没有返回值的函数。

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

二、创建过程

基本语法create procedure 过程名字([参数列表])

begin

-- 过程体

end

如果过程体中只有一条指令,则可以省略 begin 和 end

cc00ff539abebdc86e2bfd5f2134a2a4.png

创建一个完整的存储过程

538a95b3c58aeea5d0791e8118186953.png

三、查看过程

查看全部存储过程:show procedure status [like 'pattern'];

35ecad4f0b9eea14a1b83f3f5ae23b0a.png

查看存储过程的创建语句:show create procedure 过程名字

5c2ff8520ab366bb130400d6674a995f.png

四、调用过程

语法:call 过程名([实参列表])

因为存储过程实际上是一种函数,所以存储过程名后需要有()符号,即使没有参数也需要()

157ba4762295ccb8220093ba8d1c2ed2.png

五、删除过程

语法:drop procedure 过程名

fea8dce3469122edbae6550ae879c621.png

六、存储过程的形参类型

函数的参数需要指定数据类型,过程比函数更加严格。过程有三种自己的参数类型in:参数从外部传入到内部,可以是数据或者变量

out:参数从过程里面把数据保存到变量,然后交给外部使用,从外部传入的必须是变量。如果从外部传入的变量本身有值,需要先清空在传入内部

inout:此参数只能传递变量,该变量的值可以给过程内部使用,过程结束后可以变量的值传递给过程外部使用

基本语法

procedure 过程名(in 参数名字 参数类型, out 参数名字 参数类型, inout 参数名字 参数类型)

我们先定义一个简单的过程delimiter ##

create procedure pro(in var1 int, out var2 int, inout var3 int)

begin

-- 查看该过程传入的三个变量

select var1, var2, var3;

end

##

delimiter ;

-- 调用过程

call pro(1, 2, 3);

在调用该函数的时候出现错误,因为 in 和 out 类型只能接受变量,不能接受具体的数值

1de6c51aa8313f49cbed182bcfbb0463.png

因此,我们先定义几个变量,然后再调用

2a3a34d30338cf0116b1d40a37f0ac16.png

可以看到,传递给 out 类型参数的 @var2 变量在经过过程处理之后,变为了 null,这是因为在 out 修饰的参数中,如果传入的变量有值,也会自动清空为 null。同时在过程内部对变量的值的改变会影响到外部

1.

先来看一个例子set @no1 = 100;

set @no2 = 200;

set @no3 = 300;

delimiter ##

create procedure pro(in var1 int, out var2 int, inout var3 int)

begin

-- 查看传入的三个变量的值

select var1, var2, var3;

-- 修改三个变量的值

set var1 = 1;

set var2 = 2;

set var3 = 3;

-- 修改后的三个变量的值

select var1, var2, var3;

-- 查看会话变量

select @no1, @no2, @no3;

end

##

delimiter ;

-- 调用改方法

call pro(@no1, @no2, @no3);

如图所示,我们成功创建了该过程

4831440e61975a7245ea312d6e23d919.png

然后我们调用该方法,参数就是之前定义的变量,结果如下。可以看到 in 类型参数在内部改变后,在外部查询还是改变之前的值,out 和 inout 类型参数在内部改变后,外部查询就是改变之后的值。

676125b9d7c84ee09f69b6a5d6dea39c.png

2.

我们在来看一个例子set @no1 = 100;

set @no2 = 200;

set @no3 = 300;

delimiter ##

create procedure pro2(in var1 int, out var2 int, inout var3 int)

begin

-- 查看三个传入进来的数据的值

select var1, var2, var3;

-- 修改三个变量的值

set var1 = 1;

set var2 = 2;

set var3 = 3;

-- 查看修改后的三个变量的值

select var1, var2, var3;

-- 查看会话变量

select @no1, @no2, @no3;

-- 修改会话变量

set @no1 = 'a';

set @no2 = 'b';

set @no3 = 'c';

-- 查看修改会话变量之后的值

select @no1, @no2, @no3;

end;

##

delimiter ;

-- 调用过程

call pro2(@no1, @no2, @no3);

我们不仅在内部对传入的参数作了修改,还直接对会话变量作了修改。对应 in 类型参数,只有直接对会话变量进行修改,外部才真查询到修改;out 和 inout 参数若已经通过传入的参数进行修改了,外部查询到的就是对参数修改后的值,就算在内部使用会话变量修改也没有用

55473b42ddbdfe22936db2004b0e1978.png

总结

in 类型修饰的变量类似于“值传递”,即传入的只是变量的拷贝,就算在过程里面修改了,那也只是对拷贝的变量进行修改,原来的变量的值依然没有修改

out 和 inout 类型修饰的变量也同样是 “值传递”,和 in 不同是的,他们是通过引用来传递的,即先拷贝一个引用,指向传入的变量,对变量进行修改。此时变量的修改就会覆盖原来的值

七、过程和函数

相同点

存储过程和函数都是为了可重复执行操作数据库的 sql 语句的集合

存储过程和函数都是一次编译,后续执行

不同点

标识符不同,函数是 function,过程是 procedure

函数中有返回值,过程没有返回值

函数中不能使用 select 语句,而过程可以使用

函数最后可以通过 select 语句使用,过程通过 call 语句使用

相关阅读

打开navicat for mysql接着打开帮助,选中注册,

把下面的复制上去就可以了

NAVH-WK6A-DMVK-DKW3

我们经常会面临要从数据库里判断时间,取出特定日期的查询。但是数据库里储存的都是unix时间戳,处理起来并不是特别友好。幸而MYSQL

在进行mysql zip版本的安装时,遇到上图的错误,在网上找了相关的文件拷贝到相应目录下,但还是不行。 后来终于找到解决方法:下载 VC re

在Navicat中进行连接测试时,发现报错2509,还有乱码!mysql 2509 加密方式导致的报错,在8以后的版本默认的加密方式都改为了caching_sha

如果存储过程中含有动态SQL语句,在触发器中调用该存储过程时会报错ERROR 1336 (0A000): Dynamic SQL is not allowed in stored fu

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

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

相关文章

服务器怎么不用绑定域名搭建网站,一个空间放两个网站,且不用子目录绑定域名的方法...

一个空间绑定两个域名的办法操作很多空间支持多域名绑定,但是不支持子目录绑定,这时我们就可以考虑如下几种方法来实现一个空间放多个域名站点的方法,只是其他站点都需要在一个目录下大开,但这毫不影响搜索引擎的收录。方法一&…

宝藏网站IPOL:Image Processing On Line 经典图像处理论文+源码+在线仿真

读研已有大半年的时间,在这段时间里,我一直进行图像处理相关内容的学习,平时除了完成作业、准备项目之外,我的日常工作就是找经典论文、翻译、阅读、分析源代码、尝试自己写代码、与其它经典算法进行比较、尝试提出自己idea&#…

网站开发之数据表开发库——Datatables

我们在做网站开发时,很常见的一个需求是做数据展示表,并且可能需要数据表能够实现一些数据筛选、排序等能够定制展现方式功能,也包括对表的样式美观会有一些需求。而这些全部都已经由Javascript的一个库——Datatables做到了,我们…

vs2013开发64位网站和项目设置

最近用mvc写网站玩,需要连接oracle数据库,我电脑是64位系统,就安装了64位的oracle客户端,然而在连接数据库时总报错,折腾了半天, 按照网上的说法,修改这里,根本不起作用&#xff0c…

基于bootstrap(H+)的MVC网站开发之一登录页面

1、bootstrap form 表单自带前端验证功能。不是特殊无需自写前端验证js。 2、表单提交有两种方式,一是form表单中submit提交。二是ajax异步提交。 3、form表单action属性 action 属性规定当提交表单时,向何处发送表单数据。 默认:为当前地…

FTP发布VS2015网站项目

1、前提条件 已经部署了FTP服务。在windows下通过iis创建Ftp服务方法可参考:Windows通过 iis创建FTP服务VS2015 asp.net 项目 2、操作步骤 1、vs菜单中 生成——发布 2、 配置发布文件及发布 创建配置文件 后面的用默认配置即可,点击发布 3、查看…

Spring学习笔记(二十三)——实现网站微信扫码登录获取微信用户信息Demo

目录微信扫码登录介绍开发步骤微信扫码登录示例微信开放文档遇到的问题使用第三方工具实现网站微信扫码登录开发前介绍开发步骤微信扫码登录获取微信用户信息Demo实现流程实现效果实现过程实现源码源码下载微信扫码登录介绍 微信扫码登录是指微信OAuth2.0授权登录让微信用户使…

ffmpeg+nginx+rtmp+web实现视频直播网站

项目简介:视频直播网站由三个部分构成:1.推流端 2.服务器 3.拉流端。在该项目中,推流端用ffmpeg完成,服务器由NGINXRTMP模块完成,拉流端使用VLC完成。 一、开发环境简介: 推流端:系统&#xff1…

网站安装打包 修改app.config[六]

在winform的安装工具中,少不免有一些配置文件要放到app.config去,于是修改也是成了一种需求! 无论是修改web.config还是app.config,普遍方式都有两种,用net自带封装的类,或是自定义xml操作。 可参考之前的一…

如何在IIS里对网站限速

不管是ISP或是程序开发者,都可能需要在特定情况下,对使用IIS搭建的Web站点进行限速。 本文就简单说说在IIS中如何限速,因为之前不久,我也象大多数开发者一样,由于程序测试的需要,寻求IIS限速的方法&#xf…

换了无线路由网站打不开的解决方法

一日领导家安装adsl宽带了想用无线上网就购了个dlink双线的无线路由,设置好参数后开始拔号等了很久都没有反应,死活拔不上去。最后没有办法只好另想他法,回到单位一想单位有一个tplink三线无线路由两个换换不就行了。想到这第二天马上拿到领导…

javaweb 网站邮件发送 javaMail

我们这里是使用qq邮箱来演示邮件的发送,需要先对qq邮箱先进行一些设置。在设置-账户我需要开启这个pop3协议,他会生成一个授权码。 常用的邮件传输协议有2种:POP3/SMTP、IMAP/SMTP。 POP和IMAP的区别:在邮箱客户端的操作&#xf…

网站图片延时加载

为什么80%的码农都做不了架构师?>>> 当你看到网页上有很多图片,会不会感觉加载速度超慢,甚至有砸电脑的冲动?其实,我们可以优先加载肉眼能够看到的图片,当用户拖动滚动条时,再加载其…

在线绘图网站

https://www.freedgo.com/

【百度地图API】——国内首款团购网站的地图插件

原文:【百度地图API】——国内首款团购网站的地图插件摘要: 本文介绍了一款应用在团购网站上的地图插件,适用于目前非常流行的团购网站。使用这款地图插件,无需任何编程技术,你就把商家的位置轻松地标注在地图上。 前台地址 http:…

电商网站接入快递查询

网页跳转格式 适用场景:在管理后台中,订单列表点击显示快递详情 和 订单详情页显示快递详情,使用 iframe 嵌入该URL http://www.kuaidi100.com/chaxun?com快递名称(可以中文英文)&nu快递单号 快递名称&#xff1a…

Python识别网站验证码

http://drops.wooyun.org/tips/6313 Python识别网站验证码 Manning 2015/05/28 10:570x00 识别涉及技术 验证码识别涉及很多方面的内容。入手难度大,但是入手后,可拓展性又非常广泛,可玩性极强,成就感也很足。 验证码图像处理 验证码图像识别技术主要是操作图片内的像素点,通过…

ASP.NET MVC 网站开发总结(五)——Ajax异步提交表单之检查验证码

首先提出一个问题:在做网站开发的时候,用到了验证码来防止恶意提交表单,那么要如何实现当验证码错误时,只是刷新一下验证码,而其它填写的信息不改变? 先说一下为什么有这个需求:以提交注册信息页…

高并发量网站解决方案

2019独角兽企业重金招聘Python工程师标准>>> 一个小型的网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对系统架构、性能的要求都很简单。随着互联网业…

Docker -- 2 -- 利用docker部署网站和数据库

在Docker – 系统整洁之道 – 1中已经对Docker的一些命令和Docker镜像的使用及操作做了记录。 这次就利用docker进行一次真正的实例使用,使用docker搭建一个简单的答题系统,这个系统是当时做来给网络安全周做手机答题的系统,很简单&#xff…