网络编程
位置:首页>> 网络编程>> 数据库>> MySQL 存储过程的基本用法介绍

MySQL 存储过程的基本用法介绍

  发布时间:2024-01-20 15:56:33 

标签:MySQL,存储过程

在外部程序访问数据库时(例如 PHP),要组织很多 SQL 语句。

特别是业务逻辑复杂的时候,一大堆的 SQL 和条件夹杂在 PHP 代码中,让人不寒而栗。现在有了 MySQL 存储过程,业务逻辑可以封装存储过程中,这样不仅容易维护,而且执行效率也高。

一、MySQL 创建存储过程

"pr_add" 是个简单的 MySQL 存储过程,这个MySQL 存储过程有两个 int 类型的输入参数 "a"、"b",返回这两个参数的和。


drop procedure if exists pr_add;


计算两个数之和


create procedure pr_add
(
a int,
b int
)
begin
declare c int;
if a is null then
set a = 0;
end if;
if b is null then
set b = 0;
end if;
set c = a + b;
select c as sum;
/*
return c;
不能在 MySQL 存储过程中使用。return 只能出现在函数中。

*/
end;


二、调用 MySQL 存储过程


call pr_add(10, 20);


执行 MySQL 存储过程,存储过程参数为 MySQL 用户变量。


set @a = 10;
set @b = 20;
call pr_add(@a, @b);


三、MySQL 存储过程特点

创建 MySQL 存储过程的简单语法为:


create procedure 存储过程名字()
(
[in|out|inout] 参数 datatype
)
begin
MySQL 语句;
end;


MySQL 存储过程参数如果不显式指定"in"、"out"、"inout",则默认为"in"。习惯上,对于是"in" 的参数,我们都不会显式指定。

1. MySQL 存储过程名字后面的"()"是必须的,即使没有一个参数,也需要"()"

2. MySQL 存储过程参数,不能在参数名称前加"@",如:"@a int"。下面的创建存储过程语法在 MySQL 中是错误的(在 SQL Server 中是正确的)。 MySQL 存储过程中的变量,不需要在变量名字前加"@",虽然 MySQL 客户端用户变量要加个"@"。


create procedure pr_add
(
@a int, -- 错误
b int -- 正确
)


3. MySQL 存储过程的参数不能指定默认值。

4. MySQL 存储过程不需要在 procedure body 前面加 "as"。而 SQL Server 存储过程必须加 "as" 关键字。


create procedure pr_add
(
a int,
b int
)
as -- 错误,MySQL 不需要 "as"
begin
mysql statement ...;
end;


5. 如果 MySQL 存储过程中包含多条 MySQL 语句,则需要 begin end 关键字。


create procedure pr_add
(
a int,
b int
)
begin
mysql statement 1 ...;
mysql statement 2 ...;
end;


6. MySQL 存储过程中的每条语句的末尾,都要加上分号 ";"


...
declare c int;
if a is null then
set a = 0;
end if;
...
end;


7. MySQL 存储过程中的注释。


/*
这是个
多行 MySQL 注释。
*/
declare c int; -- 这是单行 MySQL 注释 (注意 -- 后至少要有一个空格)
if a is null then # 这也是个单行 MySQL 注释
set a = 0;
end if;
...
end;


8. 不能在 MySQL 存储过程中使用 "return" 关键字。


set c = a + b;
select c as sum;
/*
return c; -- 不能在 MySQL 存储过程中使用。return 只能出现在函数中。
*/
end;


9. 调用 MySQL 存储过程时候,需要在过程名字后面加"()",即使没有一个参数,也需要"()"


call pr_no_param();


10. 因为 MySQL 存储过程参数没有默认值,所以在调用 MySQL 存储过程时候,不能省略参数。可以用 null 来替代。

0
投稿

猜你喜欢

  • 在运营或者对各种 SDK 或者 API 进行调试的时候,邮件功能基本上都会被使用到。在测试的时候,可能很多人都会使用 SMTP 或者自己的邮
  • 在进行WEB标准网页设计时,必不可少的是写入大量的CSS语法,一般情况下我们可以通过Dreamweaver软件的“CSS样式”面板自动生成相
  • 我就废话不多说啦,还是直接看代码吧!import osimport sysimport djangosys.path.append(r
  • 遇到的问题:在pytorch训练过程中突然out of memory。解决方法:1. 测试的时候爆显存有可能是忘记设置no_grad加入 w
  • 图像在计算机中的存储图像其实就是一个像素值组成的矩阵。1、黑白或灰度图像如何存储在计算机中在这里,我们已经采取了黑白图像,也被称为一个灰度图
  • MySQL支持的两种主要表存储格式MyISAM,InnoDB,上个月做个项目时,先使用了InnoDB,结果速度特别慢,1秒钟只能插入10几条
  • reduce() 函数在 python 2 是内置函数, 从python 3 开始移到了 functools 模块。官方文档是这样介绍的re
  • 前言:并行编程比程序编程困难,除非正常编程需要创建大量数据,计算耗时太长,物理行为模拟困难例子:N体问题物理前提:牛顿定律时间离散运动方程普
  • 1. 介绍前面我们尝试通过python实现了代码雨以及字母随机闪烁的效果,这次,我们再来实现一个代码的线性扫面。同样的,此次我们仍然是使用3
  • 本文实例讲述了Python自定义装饰器原理与用法。分享给大家供大家参考,具体如下:什么是装饰器?装饰器本质是一个函数,它可以在不改变原来的函
  • new_ 方法是什么?__new__方法其实就是创建对象的方法new()方法是在类准备将自身实例化时调用。一个类可以有多个位置参数和多个命名
  • Python中内置了list集合与tuple集合,在list集合中可以实现元素的添加、修改、插入、以及删除。tuple集合看似与list类似
  • UUID(Universally Unique Identifier)是通用唯一识别码,在许多领域用作标识,比如我们常用的数据库也可以用它来
  • 1.迭代器当您创建一个列表时,你可以逐个读取它的项。逐项读取其项称为迭代:mylist是一个可迭代的对象。当你使用列表解析式时,你创建了一个
  • 最近在写博客,刚好写到用户注册注销模块,觉得这一方面还是挺有趣的。当尝试掀开 Django 的源代码时一切 API 就不会变得那么摸不着。顺
  • 为了测试一组网页是否能够访问,采取python中的requests包进行批量的访问测试,并输出访问结果。一、requests包的安装 打开命
  • JavaScript中的字符串函数没有像VBScript\ASP中的内部函数那么全.不能像VB那样直接利用left和right函数来实现对字
  • 我来讲解属性部分, 这是相当有用的, 可要认真上课.首先,jquery中对html标签属性进行操作的关键词是 attr .没错,就4个字母,
  • 一个网站的导航就相当于是一条路的路标,不同的是,网站的不同栏目页的入口远远比马路要来得复杂,所以一个清晰的导航设计对于一个网站的意义远远大于
  • 按照CSS规范,浮动元素(floats)会被移出文档流,不会影响到块状盒子的布局而只会影响内联盒子(通常是文本)的排列。因此当其高度超出包含
手机版 网络编程 asp之家 www.aspxhome.com