创建无参的存储过程

这节我们主要来学习Mysql数据库的存储过程,我们知道我们要经常的对数据表进行增删改查的操作,或者叫CURD,实际上,当我们成功的输入SQL命令时,mysql引擎会对输入的命令进行语法分析,来检查一下我们的sql命令是否正确,如果正确的话,将会进行编译,编译成mysql引擎能够识别的语句。最后才开始执行,并将最后执行的结果返回给客户端,这就是mysql命令的执行流程。

我们想一下,如果我们把这个流程简化一下,比如我们省略掉语法分析和编译环节,那么mysql的执行效率是不是会有很大的提高,那么我们如何实现这个效果,那么就涉及到今天我们要讲的存储过程,那么首先我们来了解一下什么是存储过程?

一、什么是存储过程?

存储过程是SQL语句和控制语句的预编译集合,以一个名称存储并作为一个单元处理

存储过程存储在数据库内,可以由应用程序调用执行,而且允许用户声明变量以及进行流程控制,存储过程可以接收参数,可以接收输入类型的参数,也可以接收输出类型的参数,并且可以存在多个返回值。

存储过程的效率要比我们简单的sql语句的执行的效率要高,原因就在于,比如我们要执行两条语句,那么mysql引擎就会逐一的对这两条语句进行分析,编译和执行,而我们使用存储过程之后,只有在第一次才会使用语法分析和编译,以后客户端再调用,只调用编译后的结果就可以了,省略了分析和编译的环节,所以效率要比之前要高,那么存储过程具体会有哪些优点?

二、存储过程的优点

第一,增强了sql语句的功能和灵活性。

因为在存储过程中可以写控制语句,那么就有很强的灵活性,也可以完成复杂的判断和运算。

第二,实现了较快的执行速度。

如果某一个操作包含了大量的操作语句,那么这些语句都将被mysql引擎进行语法分析和编译,所以执行过程的效率相对较低,而存储过程是预编译的,当客户端第一次调用这个存储过程的时候,mysql引擎将对他进行语法分析和编译操作,然后把这个编译的结果存储到内存当中,所以说第一次是和之前的效率是相同的,但是以后客户端再次调用这个存储过程的时候,便直接在内存当中来执行,所以说相比效率比较高,速度比较快。

第三,减少网络流量

如果我们通过客户端单独发送sql语句让服务器来执行的话,那么通过http协议提交的数据量相对较大,而使用存储过程,我们只需要传递存储过程的名字,后面加上我们要操作的那个值就行了,所以说,他提交给服务器的数据量相对较少,那么也就减少了网络流量。

三、如何创建存储过程

1、创建存储过程的语法结构

CREATE

[DEFINER={user | CURRENT_USER}]

PROCEDURE sp_name ([proc_parameter[,...]])

[characteristic ...] routine_body

proc_parameter:

[IN | OUT | INOUT] param_name type

我们发现他和创建自定义函数的语法结构很相似,最大的不同就是参数部分,DEFINER是创建者,如果省略掉DEFINER这句,,默认就是当前用户,即当前登录到mysql客户端的用户,sp_name指的是存储过程的名字,这里面它可以有0或多个参数,但是从参数的写法我们可以发现,他前面可以带有3个选项,分别IN、OUT、INOUT,他们分别代表什么意思呢?

IN :表示该参数的值必须在调用存储过程时指定

在存储过程中这个值是不能返回的,就是说只能进,不能出。

OUT :表示该参数的值可以被存储过程改变,并且可以返回

out指的是输出。

INOUT :表示该参数在调用时指定,并且可以被改变和返回

就是说可以被存储过程的过程体改变并返回给调用者。

2、过程体

(1)过程体由合法的SQL语句构成

(2)过程体可以是“任意”的SQL语句

当然这个任意是加引号的,我们不可能通过存储过程来创建数据表,也不可能通过存储过程来创建数据库,那么这个所谓的任意主要指的是对记录的增删改查以及多表连接这几个操作。

(3)过程体如果为复合结构则使用BEGIN...END语句

也就是说当超过1个语句时,我们就要用BEGIN..END将这些语句包含在其中。

(4)复合结构可以包含声明、循环、控制结构

比如if语句、when语句,while循环等等。

3、下面我们就来创建一个简单的没有参数的存储过程,假设我们叫它sp1,它可以获取当前mysql版本的这个功能。我们输入CREATE PROCEDURE sp1( ) SELECT VERSION( );

OK,命令执行成功,这个存储过程我们就创建成功。

那么既然我们的存储过程创建成功了,那么我们现在就可以来调用我们的存储过程,那么怎么调用呢?

四、如何调用存储过程?

存储过程的调用一共有两种结构

CALL sp_name([parameter[,...]])

CALL sp_name[( )]

我们发现他们都是通过关键字CALL来实现,我们发现后边可以带有参数,也可以不带有参数。这里大家可以看一下,当没有参数的时候,我们存储过程名称的后面可以不带有小括号,如果带有参数,我们在调用时就必须加上这个小括号。 下面我们就来调用一下刚才那个没有参数的存储过程,我们输入

CALL sp1;

OK,我们就可以得到我们当期mysql的版本信息。当然我们也可以加上小括号,我们输入CALL sp1( );

OK,同样可以得到mysql的版本信息,这是我们定义的没有参数的存储过程

mysql无参的存储过程_创建无参的存储过程(四十七)相关推荐

  1. MySQL存储过程_创建-调用

    存储过程:SQL中的"脚本" 创建存储过程 调用存储过程 存储过程体 语句块标签 存储过程的参数 in:向过程里传参 out:过程向外传参值 inout:in and out #S ...

  2. 分布式mysql 不支持存储过程_分布式数据库VoltDB对存储过程的支持

    设计数据库架构 VoltDB是关系数据库产品.关系数据库由具有约束,索引和视图的表和列组成.VoltDB使用标准SQL数据库定义语言(DDL)语句来指定数据库架构.因此,为VoltDB数据库设计架构使 ...

  3. 什么时候用到mysql存储过程_什么时候用到存储过程

    存储过程一般用于处理比较复杂的任务,基础ms这个平台,可以大大降低耗时,其编译机制也提高了数据库执行速度 存储过程不仅仅适用于大型项目,对于中小型项目,使用存储过程也是非常有必要的.其威力和优势主要体 ...

  4. oracle 创建,删除存储过程,参数传递,创建,删除存储函数,存储过程和函数的查看,包,系统包

    认识存储过程和函数 存储过程和函数也是一种PL/SQL块,是存入数据库的PL/SQL块.但存储过程和函数不同于已经介绍过的PL/SQL程序,我们通常把PL/SQL程序称为无名块,而存储过程和函数是以命 ...

  5. db2 删除存储过程_数据库教程-SQL Server存储过程使用及异常处理

    SQL Server存储过程 存储过程(Procedure)是数据库重要对象之一,也是数据库学习的重点之一.本文,我们以SQL Server为例对存储过程的概念.定义.调用.删除及存储过程调用异常等通 ...

  6. php mysql oracle数据库表结构图_创建数据库表

    数据库的作用:1.有结构的存储大量数据.2.有效保持数据的一致性.3.方便智能的分析,产生新的有用的信息.4.满足应用的共享和安全的要求. 关系型数据库的基本组成:一个数据库是由一组数据表(table ...

  7. MySQL数据库课程实验报告_创建数据库并插入数据

    1.1 进入数据库 $ sudo service mysql start $ mysql -u root 2.1 创建数据库 create database mysql_shiyan; 创建后查看数据 ...

  8. avue-crud 使用_创建和使用CRUD存储过程

    avue-crud 使用 The Data Storage Layer consists of SQL Server and database objects. The Data Access Lay ...

  9. 数据库创建存储过程_创建存储过程来修复孤立的数据库用户

    数据库创建存储过程 问题 ( The Problem ) This problem demonstrates a very common scenario. When a backed up data ...

  10. mybatis调用mysql存储过程_秒会mybatis调用存储过程(MySQL)

    一.简介 有的时候,我们不方便自己写SQL,而是只能调用别人提供的存储过程,那如何使用mybatis调用存储过程呢? 二.示例步骤(MySQL) 2.1 准备一张表 DROP TABLE IF EXI ...

最新文章

  1. 中科大“九章”历史性突破,但实现真正的量子霸权还有多远?
  2. 综述|核心开发者全面解读Pytorch内部机制
  3. Pytorch实现基本循环神经网络RNN (3)
  4. Office Word 2007下管理参考文献(比2003版的交叉引用神马的轻松多拉)(转)
  5. 使用ln -s解决库冲突的问题
  6. MD5加密解密简介和应用
  7. ZooKeeper相关资料集锦
  8. elementUI + vue 地址跳转:无法返回上一页 - 解决篇
  9. 关于ssm框架的全部整合(一) 2021.05.09
  10. BCH恢复禁用的脚本操作码[草案]
  11. 苹果用户每天解锁iPhone手机80次
  12. 2017.0704.《计算机组成原理》-动态RAM
  13. mysql:Error while performing database loggin with the mysql driver
  14. 下载oracle环境变量失败,oracle instantClient 安装配置及Error: DPI-1047: Cannot locate a 64-bit Oracle Client...
  15. Linux SD卡驱动开发(三) —— SD 卡驱动分析CORE篇
  16. php+rabbitMQ操作之延迟队列(延迟插件)
  17. intel英特尔无线适配器高级设置
  18. BZOJ3730 震波+BZOJ4372 烁烁的游戏(动态点分治)
  19. 康巴丝(compas)某Wi-Fi万年历无法自动校时的问题
  20. java俄罗斯方块(新手版)

热门文章

  1. 锂电池电量百分比计算_电池soc是什么意思
  2. 台式计算机的安规测试要求,美国EPA发布能源之星计算机规范V8.0版
  3. c语言do while例子,C语言do while循环
  4. CSS font-weight 值对应(Regular、Normal、Medium、Light)
  5. meta分析 2. 固定效应和随机效应
  6. 计算机专业可以从事平面设计吗,计算机专业和平面设计专业是一个专业不?
  7. python txt转为csv
  8. python的csv安装_Python csv模块:处理csv文件
  9. 如何解决手机retina显示屏下的1px太粗问题
  10. v-model中修饰符lazy,number, trim的作用