首页 > 数据库 >mysql存储过程

mysql存储过程

时间:2023-03-28 10:03:50浏览次数:48  
标签:pr 存储 end int mysql MySQL 过程


我们大家都知道MySQL 存储过程是从 MySQL 5.0 开始逐渐增加新的功能。存储过程在实际应用中也是优点大于缺点。不过最主要的还是执行效率和SQL 代码封装。特别是 SQL 代码封装功能,如果没有存储过程。

在外部程序访问数据库时(例如 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 来替代。

标签:pr,存储,end,int,mysql,MySQL,过程
From: https://blog.51cto.com/u_16034393/6153822

相关文章

  • 安装MYSQL
    安装MYSQLhttps://dev.mysql.com/downloads/repo/yum/比如我们要安装8.0版本,系统是CentOS7,先安装MySQL安装源 下载MySQL安装源的安装包,或者复制下载链接,使用yumloca......
  • 环形存储
    环形缓冲区是一种特殊的缓冲区,它采用环形结构存储数据。在环形缓冲区中,当缓冲区满时,新数据会覆盖掉最早的数据,同时保持环形结构不变。环形缓冲区的使用场景很多,主要是因为......
  • Docker Desktop修改存储位置
    WindowsDockerDesktop修改存储位置一、DockerDesktop安装DockerDesktop的安装过程没有什么特殊需要说明的地方,按照正常软件安装过程完成安装即可在安装完成后,Docke......
  • mysql笔记1 基本语法(待完结)
    语法样式总的来说挺像c++的,无论是分号结尾,不强制的缩进还是/**/的注释。不过要注意它并不区分大小写,这很重要语句分类分为四种,定义的、增删改的、查询的、和管权限的。......
  • 软考中级十大管理过程(五)
    干系人管理采购管理......
  • MySQL内存
    目录InnoDB架构缓冲池(BufferPool)数据预读缓冲池(BufferPool)简介BufferPool的管理空闲页(FreePage)脏页(DirtyPage)小结InnoDB的缓存淘汰策略传统LRU算法的缺点InnoDB如......
  • mysql加解密,substring substring_index函数
    mysql加解密,substringsubstring_index函数SELECTto_base64(AES_ENCRYPT('测试串','key12345678'));SELECTAES_DECRYPT(from_base64('iqJIDwYLlcAZ/AP3VvODJg=='),'ke......
  • UI自动化-MySQL
    importpymysql'''连接mysql数据库参数:paramhost:Hostwherethedatabaseserverislocated:paramuser:Usernametologinas:parampassword:Passwordtouse.:p......
  • MySQL 中索引是如何实现的,有哪些类型的索引,如何进行优化索引
    MySQL中的索引前言索引的实现哈希索引全文索引B+树索引索引的分类聚簇索引(clusteredindex)非聚簇索引(non-clusteredindex)联合索引覆盖索引回表查询......
  • remote server can't connect mysql
    最近,在写node项目时,远程服务器在连接mysql数据库时,出现一下问题:  解决此问题:1)    2)  具体详看:https://stackoverflow.com/questions/3791694......