MySQL基础知识:存储过程 – Stored Procedure

MySQL基础知识:存储过程 – Stored ProcedureMySQL存储过程(StoredProcedure)主要的知识点:分隔符(delimiter)变量(variable)参数(parameters)分隔符(DELIMITER)MySQL通过

大家好,又见面了,我是你们的朋友全栈君。

MySQL存储过程(Stored Procedure)主要的知识点:

  • 分隔符(delimiter)
  • 变量(variable)
  • 参数(parameters)

分隔符(DELIMITER)

MySQL通过delimiter来区分不同的SQL语句(SQL Statement),默认的分隔符是 ;

对于procedure,会有多条SQL Statement,且MySQL的每个statement都需要以分隔符结束;

如果我们想把一个procedure作为一条statement,那么我们就不能用默认的分隔符;,否则MySQL Server就不会把procedure里面的多条Statement认作一条statement。

因此,需要临时换一下分隔符delimiter,以使得 procedure 作为一条statement。

变量(Variable)

有三种变量:

  • Stored Procedure的局部变量:作用域在代码块内(begin和end之间),用declare定义。
  • Session级别的session变量 (session variable) 即是 用户自定义变量(User-Defined Variables):作用域在当前连接的session;变量名以@开始。
  • 系统变量 (Server System Variables):全局或会话级。

注意: 一般情况我们在存储过程中都应该使用局部变量

参数

三种参数:

  • IN
  • OUT
  • INOUT

示例:

数据库的dump脚本Github

use mysql_practice;

drop procedure if exists sp_get_customer_basic_info;

-- #1: 吧默认的分隔符从 ';' 改为 '$$'; 
-- 注: $$ 后面没有 ';' 
DELIMITER $$

create procedure sp_get_customer_basic_info
(
	IN limitCount INT,
    OUT totalCount INT
)
BEGIN

declare total_count int default 0; -- 定义局部变量:scope 在BEGIN和END之间

set @session_count = 0; -- 定义session级别的变量。

SELECT 
	cus.no,
	cus.first_name,
	cus.last_name,
	pr.ext_name as province_name,
	cr.ext_name as city_name,
	ar.ext_name as area_name,
	ca.address_detail
FROM mysql_practice.customer cus
join customer_address ca
on ca.customer_id = cus.id
join region ar -- area
on ca.area_id = ar.id and ar.deep = 2
join region cr -- city
on ar.pid = cr.id
join region pr -- province
on cr.pid = pr.id
LIMIT limitCount; -- proceduer里面的sql语句还是用';'分割。

select count(1) into totalCount from mysql_practice.customer; -- 赋值OUT参数

END $$ -- $$表示整个proceduer作为一个statement的结束


DELIMITER ;  -- 改回默认的分隔符: ';'.

执行procedure:

set @totalCount = 0;
call sp_get_customer_basic_info(10, @totalCount );
select @totalCount;

参考资料

  1. SHOW VARIABLES Statement
  2. How to Declare Variables in MySQL
  3. CREATE PROCEDURE and CREATE FUNCTION Statements

MySQL基础知识:存储过程 – Stored Procedure

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/155078.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月2日 下午10:00
下一篇 2022年7月2日 下午10:00


相关推荐

  • 【Android TV 开发】–>Leanback 中的 HorizontalGridView

    【Android TV 开发】–>Leanback 中的 HorizontalGridViewLeanBack 是 Google 官方推出的 TV 端的功能库 里面包含了很多在 TVAndroid 端开发常用的控件 本文重点介绍其对 RecyclerView 适配 TV 端做的封装 HorizontalGr

    2026年3月18日
    1
  • linux下安装mysql(压缩包版安装)

    linux下安装mysql(压缩包版安装)1.mysql安装包(linux)下载链接:https://dev.mysql.com/downloads/mysql/根据自己需要选择版本完成压缩包下载。2.安装①目录(根据自己实际情况选择目录)压缩包放置目录:/home/testuser/softwareMysql目录安装位置:/usr/local/mysql数据库保存位置:/usr/local/mysql/data/mys…

    2022年5月12日
    42
  • 怎样使用msn?

    怎样使用msn?IM 群使用帮助 1 IM 是什么 IM 就是我们常说的聊天工具 InstantMesse 的通用英文缩写 目前国内流行的 IM 包括 MSN 以及其它类似软件 2 IM 群是什么

    2026年3月17日
    2
  • 美化包软件_手机音量进度条 插件

    美化包软件_手机音量进度条 插件前言在我们进行自动化测试的时候,用例往往是成百上千,执行的时间是几十分钟或者是小时级别。有时,我们在调试那么多用例的时候,不知道执行到什么程度了,而pytest-sugar插件能很好解决我们的痛点。

    2022年7月31日
    6
  • 屡次停止运行怎么解决_很抱歉已停止运行解决方法

    屡次停止运行怎么解决_很抱歉已停止运行解决方法背景我一般运行appium都是在osx或者linux上面,最近在教几个同事使用appium做些自动化(爬虫)的事,有几个人使用的是windows,配置环境搞了很久,服务跑起来了之后,用代码运行,又报了上面标题的错误。问题分析首先判断,这是一个python的错误,也就是说,不是appium本身的问题,那就从两点开始分析,要么是系统环境问题,要么是哪里的配置问题。先从配置的问题开始下手,毕竟新手一般都容易犯一些低级错误。但是拿着同事的代码在另一位同事的机器(osx)上跑,怎么都

    2022年10月1日
    4
  • 12 别再用模板了!扣子高阶玩法:手把手教你打造你的专属AI智能体

    12 别再用模板了!扣子高阶玩法:手把手教你打造你的专属AI智能体

    2026年3月12日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号