首页 > 数据库 >MySQL数据库--存储过程

MySQL数据库--存储过程

时间:2022-11-30 18:12:27浏览次数:40  
标签:语句 存储 调用 -- 数据库 int MySQL var 过程

简介

  1. MysQL数据库存储过程是一组为了完成特定功能的SQL语句的集合 
  2. 存储过程这个功能是从5.0版本才开始支持的,它可以加快数据库的处理速度,增强数据库在实际应用中的灵活性 
  3. 存储过程在使用过程中是将常用或者复杂的工作预先使用SQL语句写好并用一个指定的名称存储起来,这个过程经编译和优化后存储在数据库服务器中。当需要使用该存储过程时,只需要调用它即可 
  4. 操作数据库的传统SQL语句在执行时需要先编译,然后再去执行,跟存储过程一对比,明显存储过程在执行上速度更快,效率更高 

存储过程的优点

1、执行一次后,会将生成的二进制代码驻留缓冲区,提高执行效率。

2、SQL语句加上控制语句的集合,灵活性高。

3、在服务器端存储,客户端调用时,降低网络负载。

4、可多次重复被调用,可随时修改,不影响客户端调用。

5、可完成所有的数据库操作,也可控制数据库的信息访问权限。

创建,调用,查看存储过程

##创建存储过程:
 DELIMITER $$                  #将语句的结束符号从分号;临时改为两个$$ (可以是自定义)
 CREATE PROCEDURE Proc ()      #创建存储过程,过程名为Proc,不带参数
 -> BEGIN                      #过程体以关键字BEGIN开始
 -> select * from store_info;  #过程体语句
 -> END $$                     #过程体以关键字END结束
 ​
 DELIMITER;                    #将语句的结束符号恢复为分号
 ​
 ##调用存储过程##
 CALL Proc;
 ​
 ##查看存储过程##
 SHOW CREATE PROCEDURE [数据库.]存储过程名;  #查看某个存储过程的具体信息
 ​
 SHOW CREATE PROCEDURE Proc;
 SHOW CREATE PROCEDURE Proc\G
 ​
 SHOW PROCEDURE STATUS [LIKE '%Proc%'] \G
 ​
 ##删除存储过程##
 #存储过程内容的修改方法是通过删除原有存储过程,之后再以相同的名称创建新的存储过程。
 DROP PROCEDURE IF EXISTS Proc;
 #仅当存在时删除,不添加If EXISTS 时,如果指定的过程不存在,则产生一个错误。

创建和调用存储过程

delimiter $$
 create procedure proc01 ()    #创建存储过程,过程名为proc01,不带参数
 -> begin                      #过程体以关键字BEGIN开始
 -> create table student(id int,name char(10),age int);
 -> insert into student values(1,'zhangsan',18);
 -> insert into student values(2,'lisi',18);
 -> select * from student;
 -> end $$                     #过程体以关键字END结束
 ​
 delimiter ;                   #将语句的结束符号恢复为分号
 ​
 call proc01;                  #调用存储过程

 

 

 

 

查看存储过程

 show create procedure proc01\G       #查看存储过程的具体信息
 ​
 show procedure status like '%Proc01%'\G   #查看存储过程的状态

 

 

 

 

删除存储过程

存储过程内容的修改方法是通过删除原有存储过程,之后再以相同的名称创建新的存储过程。

drop procedure if exists proc01;
 #仅当存在时删除,不添加If EXISTS 时,如果指定的过程不存在,则产生一个错误。

 

 

存储过程的参数

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

(变量名不能含有下划线)

delimiter $$
 create procedure proc2(in stuname char(20))    #参数为stuname,数据类型一定要与下面的where语句后字段的数据类型相同
 -> begin
 -> select * from student where name = stuname;
 -> end $$
 delimiter ;
  
 call proc2('zhangsan');      #调用存储过程,并传入参数'zhangsan'

 

 

存储过程的控制语句

准备一个表

create table t (id int(10)) ;
 insert into t values (10) ;

条件语句 if-then-else . .. . end if

delimiter $$  
 create procedure proc03(in innum int)   #创建存储过程proc03,参数为innum,类型为int 
 -> begin 
 -> declare var int;         #定义变量var为int类型 
 -> set var=innum*2;         #变量var的值等于传入的参数值乘2
 -> if var>=10 then          #当var的值大于10时,id值会加1,否则减1
 -> update t set id=id+1;  
 -> else 
 -> update t set id=id-1;  
 -> end if;  
 -> end $$
  
 delimiter ;
 ​
 call proc03(8);    #调用存储过程,并传入参数8
 ​
 call proc03(3);    #调用存储过程,并传入参数3

 

 

 

循环语句 while ···· end while

delimiter $$                   #修改默认结束符为$$
 create procedure proc04()      #创建存储过程proc04
 -> begin                       #过程体以关键字begin开始
 -> declare var int(10);        #定义变量var为int类型
 -> set var=0;                  #var的起始值为0
 -> while var<6 do              #使用while循环,当var值小于6时满足条件,则向表中插入var的值
 -> insert into t values(var);  
 -> set var=var+1;              #每次循环后var值自增1
 -> end while;                  #结束while循环
 -> end $$                      #创建存储过程结束
 ​
 delimiter ;                    #重新修改默认结束符为原始的;
 ​
 call proc04;                   #调用存储过程proc04

 

 


标签:语句,存储,调用,--,数据库,int,MySQL,var,过程
From: https://www.cnblogs.com/fengxia6/p/16939312.html

相关文章

  • 构建基于 Ingress 的全链路灰度能力
    作者:涂鸦背景随着云原生技术不断普及,越来越多的业务应用开始向云原生架构转变,借助容器管理平台Kubernetes的不可变基础设施、弹性扩缩容和高扩展性,助力业务迅速完成数......
  • 微服务减少jar包体积
    <build><finalName>${project.artifactId}</finalName><plugins><!--打包jar--><plugin><groupId>org.apa......
  • 如何在NetSuite中使用状态步骤条 Share how to use Step Bar in NetSuite build-in UI
    背景及应用场景我们在使用NetSuite中的状态字段时(无论是系统的状态字段还是自定义的字段),经常会遇到状态之间的步骤性,有的流程对状态步骤有特定的需求(比如满足什么条件才......
  • maven配置文件
    maven配置文件<build><finalName>${project.artifactId}</finalName><resources><resource><directory>src/main/java</directory><i......
  • 软件许可证授权优化
    在制造业生产研发设计中都会用到一些CAD/CAE/CAM/PLM之类得软件,这些软件有一个共同点“贵”,且制造业用的大多数设计软件都是国外得软件,这些软件通过许可授权以后才能给到员......
  • 十一张图让你轻松学会用VS打包
    微软的东西总是做得很完善,让人用起来很方便,同样VS的打包功能也很好使,看完下面十一张图想学不会都难!1.在解决方案资源管理器里面右击你的解决方案2.“添加”——>"新建项目"......
  • chrome谷歌浏览器通过小米路由器无法访问Internet
    这两周打开谷歌游览器莫名其妙的打开网页时,经常跳出被小米路Ax6000由器断网的提示,只有重新打开一次谷歌才恢复正常一会,又会继续抽风一会接二连三的断网中.......经过测试。1......
  • 在cmd下import cv2报错——OpenCV实现BRISK
    平台:win10x64+JetBrainsPyCharm2018.2.4x64+Anaconda3(python3.7.0+opencv3.4.5) Issue说明:同学发了个python代码,想实现下brisk,帮同学解决,自己试验了下,但是报错ImportE......
  • Golang-单元测试
    单元测试针对使用传统方式测试代码块的不足:1)测试代码块需要在main函数中去调用,需要修改main函数,若项目正在运行,就可能去停止项目,不方便2)不利于管理,当需要测试多个函数或多个......
  • 计算机视觉的常用测试数据集和源码
    以下是computervision:algorithmandapplication计算机视觉算法与应用这本书中附录里的关于计算机视觉的一些测试数据集和源码站点,整理了下,加了点中文注解。ComputerVision......