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日

相关文章

  • MySQL 如何实现表的创建、复制、修改与删除

    MySQL中如何利用代码完成表的创建、复制、修改和删除?下面总结了在创建表的时候各字段的含义以及注意哪些问题,复制和修改及删除常用的代码。 MySQL中如何利用代码完成表的创建、复制、修改和删除?下面总结了在创建表的时候各字段的含义以及注意哪些问题,复制和修改及删除常用的代码。 一、创建表 –创建新表,如果存在则覆盖 drop table [if exis…

    MySQL 2023年4月12日
    00
  • SQL的10种基本书写规则

    SQL(Structured Query Language,结构化查询语言)是一种用于数据库管理系统的计算机语言,它用于从数据库中检索和管理数据。 对于 SQL 初学者,在写 SQL 语句时,只要遵守下面几个书写规则,就可以避免很多错误。 以下是SQL的基本书写规则: SQL语句必须以关键字开始,并以分号(;)结束。例如: SELECT * FROM cus…

    MySQL 2023年3月9日
    00
  • 详解MySQL AS:设置别名

    MySQL AS是用于给SQL查询结果列、表和子查询设置别名的关键字。AS不是必需的,但它使得查询结果更易于阅读和理解。 AS用法示例: 列别名 在SELECT语句中,使用AS关键字为查询结果列设置别名。例如: SELECT first_name AS given_name, last_name AS family_name FROM customers; …

    MySQL 2023年3月9日
    00
  • tp框架报“mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead” 警告信息

    警告信息是“mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead……\ThinkPHP\Library\Think\Db\Driver\Mysql.class.php 第 52 行.”   …

    MySQL 2023年4月12日
    00
  • GaussDB(DWS)网络流控与管控效果

    摘要:本文主要介绍GaussDB(DWS)网络流控能力,并对其管控效果进行验证。 本文分享自华为云社区《GaussDB(DWS)网络流控与管控效果》,作者:门前一棵葡萄树。 上一篇博文GaussDB(DWS)网络调度与隔离管控能力,我们详细介绍了GaussDB网络调度逻辑,并简单介绍了如何应用网络隔离管控能力。本篇博文主要介绍GaussDB(DWS)网络流控…

    MySQL 2023年5月5日
    00
  • mysql -sql语句not in判断条件注意事项

    sql语句not in判断条件注意事项   问题描述:mysql数据库,存在两个表org表和kdorg表,用于存储组织信息。现在我需要从org表找出组织,条件为该组织不在kdorg表里。   sql语句:select o.orgno o.orgname from org o where orgno not in(select kd.orgno from kd…

    MySQL 2023年4月16日
    00
  • MySQL配置文件my.cnf中文详解附mysql性能优化方法分享

    MySQL配置文件my.cnf中文详解附mysql性能优化方法分享是一个比较复杂的话题,我会尽可能详细地讲解。 一、什么是my.cnf my.cnf是MySQL的配置文件,它包含了MySQL服务器、客户端及各种工具的全局参数和设置。可以通过修改my.cnf文件来改变MySQL的默认行为,以满足用户的特定需求。 my.cnf文件通常位于MySQL的安装目录下的…

    MySQL 2023年5月19日
    00
  • 向MySQL发送一个请求的时候,MySQL到底做了些什么?

    当向MySQL发送一个请求时,MySQL会执行以下步骤: 首先,MySQL会解析SQL语句,确定查询的类型和所涉及的数据表。 MySQL会检查用户是否有足够的权限执行该查询操作。 如果查询需要访问多个数据表,则MySQL会决定如何连接这些数据表,以及采用哪种连接算法。 MySQL会根据查询条件和数据表中的索引信息来生成执行计划,该计划将指导MySQL如何访问…

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