首页 > 数据库 >Mysql 系列 | procedure(存储过程)

Mysql 系列 | procedure(存储过程)

时间:2022-08-17 18:33:26浏览次数:47  
标签:语句 存储 end name Mysql loop SQL procedure

存储过程是实现特定功能的语句集合,编译后存在数据库中。

通过存储过程的名字,并给定参数来调用。

创建

create procedure  过程名([IN|OUT|INOUT 参数名 数据类型])
begin
    --- ;
end;
  • 通常在创建之前先进行删除操作,drop procedure if exists 过程名;

  • 为了避免和 SQL 语句的结束符 ; 冲突,创建前先申明存储过程要用的分隔符,delimiter 新分隔符

  • 存储过程结束后还原分隔符,delimiter ;

  • 参数的格式是,IN|OUT|INOUT 参数名 数据类型

    • IN,输入参数,修改参数的值不能被返回
    • OUT,输出参数,可被更改并返回
    • INOUT,输入输出参数,可被更改并返回
  • 结构体在 beginend 中间,可以定义变量写逻辑等

结构体

变量

  • 定义 declare

    • declare i int default 0;

    • declare v varchar(255);

    • declare d date default '2022-08-17';

  • 赋值,可以是一个固定的值,也可以从数据表中查出并赋值

    • set i = 9;

    • set v = 'hello'

    • select name into v from users where id = 1 ,从 users 表中取得 name 赋值给 v

条件判断

  • if 条件1 then
      语句1;
    elseif 条件2
      语句2;
    else
      语句3;
    end if;
    
  • case 判断条件
    when 条件1 then 结果1;
    when 条件2 then 结果2;
    else 结果3;
    end case;
    

循环

  • while (条件) do
      语句;
    end while;
    
  • repeat
      语句;
    until 条件;
    end repeat;
    
  • loop_name: loop
      if 条件1 then
        leave loop_name;  /* 相当于 break */
      end if;
      
      if 条件2 then
        iterate loop_name;  /* 相当于 continue */
      end if;
    
      语句;
    end loop loop_name;
    

调用

/* 如果有,先删除 */
drop procedure if exists p1;
/* 定义存储过程边界符 */
delimiter ;;

/* 创建存储过程 */
create procedure p1(in i1 int, in i2 int, out r int)
begin
  结构体;
end;;

/* 还原边界符 */
delimiter ;

/* 调用 */
call p1(1, 2, @re);
select @re;

查看

  • /* 查看存储过程 */
    SHOW PROCEDURE STATUS WHERE db=’数据库名’;
    
  • /* 查看存储过程定义内容 */
    SHOW CREATE PROCEDURE 数据库.存储过程名;
    

修改

ALTER PROCEDURE 存储名
  CONTAINS SQL  /* 包含SQL语句,但不包含读或写数据的语句 */
  NO SQL  /* 不包含SQL语句 */
  READS SQL  /* 包含读数据的语句 */
  MODIFIES SQL DATA  /* 含写数据的语句 */
  SQL SECURITY INVOKER  /* 指明谁有权限执行,DEFINER(定义者可执行)、INVOKER(调用者可执行) */
  COMMENT '注释内容' ;  /* 添加注释 */

标签:语句,存储,end,name,Mysql,loop,SQL,procedure
From: https://www.cnblogs.com/rendd/p/16596352.html

相关文章

  • MySQL学习笔记
    MySQL学习笔记    MySQL语句中,字符串应当用单引号表示,而不是双引号,例如’Tom’;表中字段区分大小写,name和Name是不同的字段;命令不区分大小写,DROP和drop是相同的......
  • 使用 Canal 和 Kafka 与 RDS MySQL 进行 Redis 数据同步
    教程:https://www.alibabacloud.com/blog/redis-data-synchronization-with-rds-mysql-using-canal-%26-kafka_598072源码:https://github.com/alibabacloud-howto/soluti......
  • windows下Mysql安装
    1.首先去MySQL的官网下载安装包https://downloads.mysql.com/archives/community/点下download下载至本地2.下载好mysql安装包后,将其解压到指定目录,并记下解压的目录,后......
  • HP P2000存储更换故障硬盘
    1.手动更换物理硬盘2.登录HP存储管理界面,查看当前磁盘的状态是否为AVAIL3.将新增加的磁盘添加到热备盘中1.选择HP存储管理栏2.Provisioning->ManagerGLobalSpar......
  • 关于 mysql5.7 中 创建一个用户 并为其 grant 权限 操作失败的问题
    SQL:--创建授权canal账号具有slave权限--查看密码策略状态selectplugin_name,plugin_statusfrominformation_schema.pluginswhereplugin_namelike'val......
  • 什么是docker的存储驱动?有什么作用?
    如题目所示的问题,你知道吗? 读完下面的部分,你必然会豁然开朗······ 1、当你执行dockerpull命令拉取一个镜像的时候,镜像在docker主机上是怎么存储的?2、当你执......
  • Mysql 简单笔记
    一、保留两位小数1.用于数据的四舍五入,round(x) ,其实就是round(x,0),也就是默认d为0;二、字符串拼接CONCAT()三、判断数量COUNT(IF(stuWorkSta......
  • mysql 之 my.ini 配置
    mysql之my.ini配置 1. max_allowed_packet 配置在mysqld节点下添加,配置MySQL允许的最大数据包大小,下面的500M你可以根据你的项目修改为你自己的值,只要比要导入......
  • RocketMQ 消息存储机制
    一、概述RocketMQ中的消息存储在本地文件系统中,主要是由ConsumeQueue和CommitLog配合完成的,消息真正的物理存储文件是CommitLog,ConsumeQueue是消息的逻辑队列,类似数据......
  • <摘自https://blog.csdn.net/JavaAndLI/article/details/125359786>SQL分页查询的写法
    MySQL的分页实现是使用LIMIT关键字。Oracle的分页是实现主要是基于rownum行号。SQLServer的分页主要使用的关键字是TOP。 具体用法总结如下:本文中的变量名词说明:1,......