MySQL存储过程

基本构造

delimiter $$  #定义终止符,可据习惯更换

CREATE PROCEDURE method_name()		#创建方法
BEGIN		#方法体开始
SELECT 'code';		#方法体,写SQL语句
END		#方法体终止

$$		#存储过程终止

基本语法

1.定义终止符

delimiter $$	#$$为自定义符,可据习惯更换

2.创建方法

CREATE PROCEDURE method()

3.方法体开始

BEGIN

4.方法体终止

END

5.调用方法

CALL method_name();

6.格式化方法

drop PROCEDURE method_name();

7.变量及赋值

1.局部变量

用户自定义,在当前 begin-end 块中有效

  • 声明变量

    declare var_name type [default var_value];
    

    例:

    declare nickname varchar(32);
    

2.用户变量

用户自定义,在当前会话(连接)中有效,类似JAVA中的全局变量

  • 不需提前声明,使用即声明

    @var_name
    

    例:

    set @var_name = 'var_name';
    

3.变量赋值

  • set 赋值

    set
    

    例:

    set var_name = 'var_name';
    
  • into 赋值

    可在其他 sql 语句中临时赋值,且可以同时给多个临时变量

    into
    

    例:

    select var_name1 into @var_name2 from tables_name
    

8.入参出参

  • 入参

    in param_name type
    
  • 出参

    类似 JAVA 中返回值

    out param_name type
    

    例:

    delimiter $$
    CREATE PROCEDURE method (
    	IN parameter1 VARCHAR ( 32 ),OUT parameter2 VARCHAR ( 32 )
    BEGIN
    		SELECT
    			parameter2 INTO @parameter2 
    		FROM
    			table_name 
    		WHERE
    			parameter1 = parameter1;
    END $$
    
    CALL method ( '参数1', @parameter2 ) $$
    SELECT @parameter2 $$
    
  • inout 即可入参也可出参

    inout param_name type
    

9.判断

1.IF

IF search_condition THEN statement_list
	[ELSEIF search_condition THEN statement_list]
	{ELSE statement_list}
END IF

2.CASE

CASE case_value
	WHEN when_value THEN statement_list
	[WHEN when_value THEN statement_list]
	...
	[ELSE statement_list]
END CASE
CASE
	WHEN search_condition THEN statement_list
	[WHEN search_condition THEN statement_list]
	...
	[ELSE statement_list]
END CASE

10.循环

1.LOOP

[label: ]LOOP
	statement_list

	IF exit_condition THEN
		LEAVE label; 
	END IF; 
END LOOP label;

2.REPEAT

类似 JAVA 中的 do-while

[label: ]REPEAT
	statement_list
UNTIL search_condition	#直到...为止
END REPEAT;

3.WHILE

[label: ]WHILE search_condition DO
	statement_list
END WHILE;

11.循环跳出、继续

1.LEAVE

跳出循环,类似 JAVA 中的 break

LEAVE label

2.ITERATE

继续本次循环

ITERATE label

游标

用游标得到某一个结果集,逐行处理数据,类似 JDBC 的ResultSet

  • 声明语法

    DECLARE cursor_name CURSOR FOR select_statement
    
  • 打开语法

    OPEN cursor_name
    
  • 取值语法

    FETCH cursor_name INTO var_name [,var_name]...
    
  • 关闭语法

    CLOSE cursor_name
    
  • handler 句柄

    用于循环遍历取值时创建退出循环的exit_flag

    声明变量

    DECLARE exit_flag BOOLEAN DEFAULT TRUE;
    

    声明游标

    DECLARE cursor_name CURSOR FOR select_statement
    

    声明handler

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET exit_flag = FALSE;
    

    NOT FOUND:当游标无法在循环中取到值时报此错,此SQL作用原理为当接收到NOT FOUND错误时则跳出循环,也可写为错误码:1329

    注意:在语法中,变量声明、游标声明、handler声明必须按照先后顺序写,否则创建存储过程出错

  • 创建循环

    label: LOOP
    	FETCH cursor_name INTO var_name [,var_name]...
    	IF exit_flag THEN
    		SELECT var_name1,var_name2...;
    	ELSE
    		LEAVE label; 
    	END IF; 
    END LOOP label;
    

常用函数

1.字符串拼接

CONCAT(str1,str2,...)

2.取时间差

TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)

取 datetime_expr1 - datetime_expr1 的差值,unit 为单位

原文链接:https://www.cnblogs.com/V-Notes/p/17271130.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL存储过程 - Python技术站

(0)
上一篇 2023年4月18日
下一篇 2023年4月18日

相关文章

  • Node.js和mybatis分别实现mysql中like变量模糊查询

    <!– mybatis –> <where> <if test=”varName != ” and varName != null” > var_name like ‘%${varName}%’ </if> </where>    //node 变量 if (data.varName &amp…

    MySQL 2023年4月13日
    00
  • 配置ogg异构oracle-mysql(1)基础环境配置

    一、环境描述: 192.168.0.164 ( Oracle ) —> 192.168.0.165 (Mysql ) 版本: 操作系统:redhat5.8 Oracle:  11.2.0.3 Mysql:     5.5.37 goldgate: 11.2.0.1.3 for oracle 11.2.0.1.1 for mysql 测试用户: 在ora…

    MySQL 2023年4月12日
    00
  • mysql or走索引加索引及慢查询的作用

    MySQL OR运算符走索引、加索引及慢查询的作用 在MySQL中,我们常常会使用OR运算符来连接多个条件来进行复杂的查询。但是,如果使用不当,OR运算符会导致查询变慢,因此需要注意。 OR运算符的使用场景 假设我们有一张名为“users”的用户表,其中包含了用户的姓名、性别、年龄和城市等字段信息。 现在我们需要查询女性用户或者年龄大于25岁的用户,此时我们…

    MySQL 2023年5月19日
    00
  • MySQL数据表添加字段的方式有哪些

    这篇文章主要介绍“MySQL数据表添加字段的方式有哪些”,在日常操作中,相信很多人在MySQL数据表添加字段的方式有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL数据表添加字段的方式有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧! MySQL 数据表是由行和列构成的,通常把表的“列”称为字段(Field)…

    MySQL 2023年4月8日
    00
  • mysql面试小结

    MySQL 1. 索引 1.1 什么是索引 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。 索引是一种数据结构。数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用B树及其变种B+树。 更通俗的说,索引就相当于目录。为了方便查找书中的内容,…

    MySQL 2023年4月18日
    00
  • MySQL如何分析查询语句?

    MySQL是一种开源的、用于管理关系型数据库的软件,它支持许多不同的数据类型和适用于各种应用程序的查询语句。因此,在对MySQL上运行的查询进行优化和调整时,它可以提供一些有用的工具以确保查询能够更快速和有效地执行。 MySQL可以分析查询语句,以便在查询之前确定最佳的查询计划。查询计划是指MySQL如何检索数据并将它们返回给用户的过程。MySQL通过分析查…

    MySQL 2023年3月10日
    00
  • Centos 6.3将Mysql 5.1.61升级为mysql 5.6.19遇到的问题及解决方式

    更新yum源 CentOS 6.3自带的yum源中没有MySQL5.6,则需要添加新的yum源。 示例: sudo rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm 卸载旧版本Mysql 如果系统中已经安装了旧版本的MySQL,则需要卸载掉。 示例: sudo…

    MySQL 2023年5月18日
    00
  • mysql Out of memory (Needed 16777224 bytes)的错误解决

    当使用MySQL时,有时会发生”Out of memory”错误。这种错误通常意味着MySQL要求的内存量超过了系统配置的限制。 在这种情况下,需要调整MySQL配置参数或增加系统内存。 以下是解决这种错误的完整攻略: 1. 确认错误来源 首先需要确认哪个应用程序导致了”Out of memory”错误。你可以检查MySQL日志文件(例如/var/log/m…

    MySQL 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部