美文网首页
Mysql存储过程的陷阱

Mysql存储过程的陷阱

作者: lz做过前端 | 来源:发表于2021-09-29 10:52 被阅读0次

1. 变量的使用

1.1. 变量的定义

-- 示例
declare declare1 binary(16);
  • 游标接收的变量定义在循环之外
  • 如果没有必要不要使用session级的变量(@XXX)
    • 该变量直到断开连接,否则一旦赋值一直存在
    • 如果是常量可以考虑使用
  • 根据游标每一次循环接收的变量而生成或者获取的变量定义在循环内部所在的begin end块中
    • begin end相当于一个作用域,定义在作用域内的变量相当于该作用域内的局部变量,定义在作用域外的相当于全局变量
    • 如果是定义在作用域之外的变量,如果下一次的循环没有走到变量重新赋值的地方,就会有问题

1.2. 变量的赋值

  • set
    • 如果使用 select 进行变量的set赋值,则如果 count > 1,程序直接退出,并且不会报错
    • 如果 count = 0,则正常执行,此时变量为null
-- 示例
set declare1 = (select id from table1 where column1 = 'xxx' order by column2 desc limit 1);
  • select into
    • 如果 count > 1,程序直接退出,并且不会报错
    • 如果 count = 0,并且处于循环,则跳出当前循环
-- 示例
select column1, column2, column3 into declare1, declare2, declare3 from table1 where column4 = 'xxx';
select column1, column2, column3 from table1 where column4 = 'xxx' into declare1, declare2, declare3;
  • 总结
    • 无论 set 还是 select into 都需要确保查询结果唯一,而 set 允许查询结果为空, select into 不允许
    • 使用 order by + limit 1 是一个粗糙的解决方式,等于你在忽略其余的数据

2. begin end

  • 利用 begin end 可以实现游标循环的嵌套
  • 使用了 if else 语句时,最好一上来就用 begin end,虽然一个语句也可以不使用 begin end,但是保不齐后续会增加逻辑。对于多条语句该条件下只会执行第一个语句,后续的语句的执行与 if 条件无关

相关文章

  • Mysql存储过程的陷阱

    1. 变量的使用 1.1. 变量的定义 游标接收的变量定义在循环之外 如果没有必要不要使用session级的变量(...

  • 15 MySQL 存储过程

    MySQL 存储过程 [toc] 存储过程概述 存储过程介绍 存储过程,相当于是 MySQL 语句组成的脚本 指的...

  • 存储过程

    使用存储过程 1.存储过程 ​ 需要MySQL5---->> MySQL5添加了对存储过程的支持。 ​ 迄...

  • Mysql存储过程

    阅读目录:MySQL存储过程_创建-调用-参数 存储过程:SQL中的“脚本” 创建存储过程 调用存储过程 存储过程...

  • MySQL存储过程详解 mysql 存储过程

    原文链接 MySQL存储过程详解 1.存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然...

  • 面试官突然问我MySQL存储过程,我竟然连基础都不会!(详细)

    MySQL存储过程 一、存储过程 1.1 什么是存储过程 存储过程(Stored Procedure)是在大型数据...

  • SQL基本语句(以MySQL为例)-- 第五部分

    19、使用存储过程MySQL的存储过程的语句跟这本书上的差太远了吧,以下参考自:MySQL存储过程教程 20、管理...

  • MySQL存储过程创建及调用方法

    MySQL存储过程是一个sql语句,那么我们如何创建呢,MySQL存储过程创建及修改,删除操作。 1,存储过程创建...

  • 存储过程

    创建存储过程 mysql: 执行存储过程 mysql: 使用OUT参数和INOUT参数: PREPARE和EXEC...

  • MySQL存储过程

    1、关于MySQL的存储过程 存储过程是数据库存储的一个重要的功能,但是MySQL在5.0以前并不支持存储过程,这...

网友评论

      本文标题:Mysql存储过程的陷阱

      本文链接:https://www.haomeiwen.com/subject/sgfjnltx.html