MySQL---存储过程

存储过程的相关概念

是一组为了完成特定功能的sql语句的集合,类似于函数

写好了一个存储过程之后,我们可以像函数一样随时调用sql的集合。

复杂的,需要很多sql语句联合执行完成的任务

存储过程再执行上比sql语句的执行速度更快,效率也更高。

存储过程的优点

  • 执行一次后,会将生成的二进制代码驻留缓冲区,提高执行效率。
  • SQL语句加上控制语句的集合,灵活性高。
  • 在服务器端存储,客户端调用时,降低网络负载。
  • 可多次重复被调用,可随时修改,不影响客户端调用。
  • 可完成所有的数据库操作,也可控制数据库的信息访问权限。

存储过程的管理

存储过程的创建过程:

 ##创建存储过程:DELIMITER $$                  #将语句的结束符号从分号;临时改为两个$$ (可以是自定义)CREATE PROCEDURE Proc ()      #创建存储过程,过程名为Proc,不带参数-> BEGIN                      #过程体以关键字BEGIN开始-> select * from store_info;  #过程体语句-> END $$                     #过程体以关键字END结束​DELIMITER;                    #将语句的结束符号恢复为分号

delimiter $$ #将语句的结束符号从分号临时改变成两个$$

create procedure proc () #创建存储过程proc:存储过程的名称。不能重复在当前库中唯一。括号里面不定义任何方法。

begin #过程体开始的关键字。begin后面跟上的是需要执行的sql语句。

end $$ #表示整个语句结束,和上面的定义开始符号一一对应。

delimiter; #将结束语句的分号恢复。

delimiter的作用就是保证整个存储过程中的sql语句能够被完整执行。

调用存储过程

 格式: call 存储过程名称

call proc1;

查看存储过程 

 SHOW CREATE PROCEDURE [数据库.]存储过程名;  #查看某个存储过程的具体信息​SHOW CREATE PROCEDURE Proc;SHOW CREATE PROCEDURE Proc\G

show procedure status where db='kgc';
show procedure status like 'proc';
#查询当前库中有多少存储过程call proc;
#调用存储过程

drop procedure if exists proc;
#如果proc这个存储过程存在则删除

存储过程的使用

mysql> delimiter $$
mysql> create procedure proc2 ()-> begin-> insert into info2 values('小白','running','2002-7-11');-> select * from info2 ;-> delete from info2 where name='小刚';-> end $$
mysql> delimiter ;
mysql> call proc2;

给存储内容传参

存储过程中参数有三种运用的方式

  • IN 输入参数: 表示调用者向过程传入值。(传入值可以是字面量或变量)
  • OUT 输出参数: 表示过程向调用者传出值。(可以返回多个值)(传出值只能是变量)
  • INOUT 输入输出参数: 既表示调用者向过程传入值,又表示过程向调用者传出值。(值只能是变量)

驶入参数

delimiter $$                                  //修改sql的结束语句标志$$
create procedure test1 (in uname char(20) )   //指定传参的变量位uname  后面为变量位的数据类型
begin
select * from info where name = uname;        //以变量位where查询条件,进行查询
select * from info;                           //查看
end $$                                        //结束符
delimiter;call test1('郭琦');
#call 存储过程名(传参内容)#数据清晰和指定数据入库。分析数据行为。
传出参数
insert into info values(2,'郭琦',@num,'是');
#传出参数。调用存储过程内部的数据传出参数到info表中

输入和输出参数

delimiter $$
create procedure test3 (inout str varchar(10))
#定义了变量之后一定要定义数据类型是什么
BEGIN
select str;
#显示输入字符
set str = concat(str,'_ky32');
#让传入的字符串做一个拼接
select str;
#加工之后的字符串
end $$
delimiter;set @str='刘亚伟';
#先传参,在外部需要加上@
call test3(@str);update info set name=@str where id = 1;
#看一下加工后str的内容

in:先传入,定义变量的值,初始值 call test3 调用存储过程,把变量的值传入存储 @str=刘亚伟_ky32

存储过程中的控制语句

delimiter $$
create procedure test5 (inout num int)
BEGIN
if num >=10 then
set num=num-6;
else
set num=num*2;
end if;
#结束if语句的判断
select num;
end $$
delimiter;set @num=19;call test5(@num);update info set id = @num where score = 100;

调用多个参数

调用多个参数:范围的方式匹配,完成传参------写入表中

delimiter $$
create procedure test6 (inout score int,out grade varchar(15))
BEGIN
if score between 85 and 100 then
set grade = '优秀';
elseif score between 60 and 84 then
set grade = '一般';
else
set grade = '不及格';
end if;
select grade;
end $$
delimiter;set @score=90;call test6(@score,@grade);update info set score=@score,pass=@grade where id =1;

while:循环语句

delimiter $$
create procedure test7 (out rescult int)
BEGIN
declare a int;
declare i int;
#在过程体当中声明变量
set a=10;
set i=1;
while i<=10 do
set a=a+10;
set i=i+1;
#相当于i++
end while;
set rescult =a;
end $$
delimiter;set @rescult=90;call test7(@rescult);select @rescult;

注意点:在使用存储过程中,在内部变量不需要加@,外部使用和赋值要加@,引用变量,在存储过程begin之后声明变量。要用declare a int; declare i int; 声明变量要加数据类型。 要想使用存储过程里面的结果,必须要out才能传出参数。在声明存储变量时,要定义好参数的传参方式 in out inout
 

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

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

相关文章

js 求数组中的对象某个属性和

可以直接看下效果 代码&#xff1a; <script>let list [{num: 1,price: 10,},{num: 2,price: 10,},{num: 3,price: 10,},{num: 4,price: 10,},]// for循环 求总数和 num的和let num 0for (let i 0; i < list.length; i) {num list[i].num}console.log(第一种&am…

学习c#的第三天

目录 C# 数据类型 值类型&#xff08;Value types&#xff09; 引用类型&#xff08;Reference types&#xff09; 指针类型&#xff08;Pointer types&#xff09; C# 类型转换 隐式类型转换 显式类型转换 类型之间的转换 - Convert 和 Parse Convert.ToInt32() 与 i…

AirTag追踪汽车

美国华盛顿特区&#xff0c;11月4日&#xff0c;在一项全新的抗击车辆盗窃的措施中&#xff0c;市长穆里尔•鲍泽签署了一项新计划&#xff0c;将向该市车辆盗窃频率较高的社区居民免费提供苹果AirTag追踪器。 AirTag是苹果公司推出的一款蓝牙跟踪设备&#xff0c;它依靠Findm…

从单体到微服务:使用Spring Boot构建事件驱动的Java应用程序

Spring Boot是Pivotal团队设计的一种微服务框架&#xff0c; 基于Spring开发&#xff0c;用于简化新Spring应用的初始搭建及开发过程&#xff0c;提升Spring 开发者的体验。它秉持“约定大于配置”的思想&#xff0c;集成了大量开箱即用的第三方库&#xff0c;支持绝大多数开源…

asp.net学院网上报销系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net学院网上报销系统是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语言 开发 asp.net学院网上报销系统 应用技术…

基于飞浆resnet50的102分类

目录 1.数据预处理 2.数据导入 3.模型导入 4.批训练 5. 输出结果 6.结果参考 1.数据预处理 Ttransforms.Compose([transforms.Resize((250,250)),transforms.RandomCrop(size224),transforms.RandomHorizontalFlip(0.5),transforms.RandomRotation(degrees15),transforms.Color…

navicat导入.sql文件出现:[ERR] 1067 - Invalid default value for ‘create_date‘

比较老的系统生成的数据库导入5.7时报错[Err] 1067 - Invalid default value for create_time 错误分析 表中的第一个TIMESTAMP列&#xff08;如果未声明为NULL或显示DEFAULT或ON UPDATE子句&#xff09;将自动分配DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP属…

ElasticSearch文档分析

ElasticSearch文档分析 包含下面的过程&#xff1a; 将一块文本分成适合于倒排索引的独立的 词条将这些词条统一化为标准格式以提高它们的“可搜索性”&#xff0c;或者 recall 分析器执行上面的工作。分析器实际上是将三个功能封装到了一个包里&#xff1a; 字符过滤器 首先&a…

【性能测试】非GUI模式Jemter压测+TPS性能拐点详细,一篇带你打通...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 非GUI模式执行Jem…

RK3568驱动指南|第七篇-设备树-第64章 device_node转换成platform_device实验

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

SOLIDWORKS软件提供了哪些特征造型方法?硕迪科技

SOLIDWORKS作为一款三维设计软件&#xff0c;为用户提供了多种特征造型方法&#xff0c;以下是其中几种常用的&#xff1a; 实体建模特征&#xff1a;SOLIDWORKS使用实体建模技术来创建和编辑三维几何体。通过使用基本几何体&#xff08;如立方体、圆柱体、圆锥体等&#xff09…

Spring-Security前后端分离权限认证

前后端分离 一般来说&#xff0c;我们用SpringSecurity默认的话是前后端整在一起的&#xff0c;比如thymeleaf或者Freemarker&#xff0c;SpringSecurity还自带login登录页,还让你配置登出页,错误页。 但是现在前后端分离才是正道&#xff0c;前后端分离的话&#xff0c;那就…

@ConfigurationProperties使用

一直有个疑问,在使用ConfigurationProperties注解作用一个配置类时,如果该配置类继承了一个父类,那么父类的那些配置字段是否可以读取配置信息。 答案是可以的&#xff0c;前提是父类对应字段的set方法是public。 BaseProperties.java Getter Setter public class BasePropert…

for循环、while循环和do while循环有什么不同

for循环、while循环和do while循环是三种常见的循环语句&#xff0c;它们的主要不同点在于循环条件的判断时机和执行顺序。具体如下&#xff1a; for循环 for循环适用于已知循环次数的循环结构&#xff0c;它的语法格式为&#xff1a; for (初始化表达式; 循环条件; 更新表达…

深度学习之pytorch第一课

学习使用pytorch&#xff0c;然后进行简单的线性模型的训练与保存 学习代码如下&#xff1a; import numpy as np import torch import torch.nn as nn x_value [i for i in range(11)] x_train np.array(x_value,dtypenp.float32) print(x_train.shape) x_train x_train.r…

nodejs 异步架构

nodejs的核心之一就是非阻塞的异步IO&#xff0c;于是想知道它是怎么实现的&#xff0c;挖了下nodejs源码&#xff0c;找到些答案&#xff0c;在此跟大家分享下。首先&#xff0c;我用了一段js代码test-fs-read.js做测试&#xff0c;代码如下&#xff1a; var path require(pa…

React 递归手写流程图展示树形数据

需求 根据树的数据结构画出流程图展示&#xff0c;支持新增前一级、后一级、同级以及删除功能&#xff08;便于标记节点&#xff0c;把节点数据当作label展示出来了&#xff0c;实际业务中跟据情况处理&#xff09; 文件结构 初始数据 [{"ticketTemplateCode": &…

uniapp vue2 vuex 持久化

1.vuex的使用 一、uniapp中有自带vuex插件&#xff0c;直接引用即可 二、在项目中新建文件夹store,在main.js中导入 在根目录下新建文件夹store,在此目录下新建index.js文件 index.js import Vue from vueimport Vuex from vuexVue.use(Vuex)const store new Vuex.Store(…

core-site.xml,yarn-site.xml,hdfs-site.xml,mapred-site.xml配置

core-site.xml <?xml version"1.0" encoding"UTF-8"?> <?xml-stylesheet type"text/xsl" href"configuration.xsl"?> <!--Licensed under the Apache License, Version 2.0 (the "License");you may no…